정답
import java.util.*;
import java.util.stream.*;
class Solution {
public int solution(String dartResult) {
int answer = 0;
//숫자 뽑아내기
String d = dartResult;
String[] arr = d.split("[^0-9]");
arr = Arrays.stream(arr).filter(x -> !x.equals("")).toArray(String[]::new);
String[] arr2 = d.split("[0-9]");
arr2 = Arrays.stream(arr2).filter(x -> !x.equals("")).toArray(String[]::new);
for(int i=0; i<arr.length; i++){
double a = Double.valueOf(arr[i]);
String[] arr3 = arr2[i].split("");
for(String j : arr3){
if(j.equals("S")){
a = Math.pow(a, 1);
}else if(j.equals("D")){
a = Math.pow(a, 2);
}else if(j.equals("T")){
a = Math.pow(a, 3);
}else if(j.equals("*")){
a *= 2;
if(i-1 >= 0){
arr[i-1] = String.valueOf(Double.valueOf(arr[i-1]) * 2);
}
}else if(j.equals("#")){
a *= -1;
}
}
arr[i] = String.valueOf(a);
}
for(String i : arr){
answer += Double.valueOf(i).intValue();
}
return answer;
}
}
분석
참고할 만한 정답
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Solution {
static int[] sum = new int[3];
static int solution(String msg){
String reg = "([0-9]{1,2}[S|T|D][*|#]{0,1})";
Pattern p = Pattern.compile(reg+reg+reg);
Matcher m = p.matcher(msg);
m.find();
for(int i=1; i<=m.groupCount(); i++){
Pattern p1 = Pattern.compile("([0-9]{1,2})([S|T|D])([*|#]{0,1})");
Matcher m1 = p1.matcher(m.group(i));
m1.find();
sum[i-1] = (int)Math.pow(Integer.parseInt(m1.group(1)), getpow(m1.group(2)));
setting(i,m1.group(3));
}
return(sum[0]+ sum[1]+ sum[2]);
}
static void setting(int idx, String msg){
if(msg.equals("*")){
sum[idx - 1] *= 2;
if(idx > 1 ){
sum[idx - 2] *=2;
}
}
else if(msg.equals("#")){
sum[idx - 1] *=-1 ;
}
}
static int getpow(String mag){
if(mag.equals("S")){
return 1;
}
else if(mag.equals("D")){
return 2;
}
else {
return 3;
}
}
}
비교 분석
- 풀이방법은 비슷하고 효율적이지는 않으나 정규식 패턴으로 사용하여 참고할 정답에 적어보았다.