

나의 풀이
import java.util.*;
class Solution {
public int solution(String dartResult) {
int answer = 0;
ArrayList<Integer> list = new ArrayList<>();
int result = 0; // 1
char isSDT;
char reward;
for (int i = 0; i < dartResult.length(); i++) {
char char_i = dartResult.charAt(i);
if (Character.isDigit(char_i)) { // 2
if (char_i == '1' && dartResult.charAt(i + 1) == '0') {
result = 10;
i++;
} else {
result = char_i - '0';
}
} else if (char_i == 'S' || char_i == 'D' || char_i == 'T') { // 3
isSDT = char_i;
switch (isSDT) {
case 'S':
break;
case 'D':
result = (int) Math.pow(result, 2);
break;
case 'T':
result = (int) Math.pow(result, 3);
break;
}
list.add(result);
} else if (char_i == '*' || char_i == '#') { // 4
reward = char_i;
int index = list.size() - 1;
if (reward == '*') {
if (index > 0) {
list.set(index - 1, list.get(index - 1) * 2);
}
list.set(index, list.get(index) * 2);
} else if (reward == '#') {
list.set(index, list.get(index) * -1);
}
}
}
return answer = list.stream().mapToInt(Integer::intValue).sum();
}
}
과정
- 결과를 담을 result와 S, D, T를 확인할 isSDT, *과 #을 확인할 reward를 선언
- 만약 i번째 문자가 숫자라면 10인지 확인해주고 10이면 i를 하나 더 증가시켜주고, result에 담는다
- i번째 문자가 S, D, T중 하나라면 그에 맞춰 result값을 2제곱, 3제곱을 해주고 list에 넣는다
- i번째 문자가 *, #중 하나라면 list의 마지막 요소를 불러와 조건에 맞게 2를 곱하거나 음수로 만들어준다
- list의 합을 answer에 넣어준다
다른 사람 풀이
import java.util.ArrayList;
class Solution {
public int solution(String dartResult) {
int answer = 0;
ArrayList<String> list = new ArrayList<String>();
String nStr = "";
int cnt = 0;
for(int i = 0; i < dartResult.length(); i++) {
if(dartResult.charAt(i) >= 48 && dartResult.charAt(i) <= 57) {
cnt++;
nStr += dartResult.charAt(i);
} else {
if(cnt > 0) {
list.add(nStr);
nStr = "";
cnt = 0;
}
list.add(dartResult.charAt(i)+"");
}
}
int count = 0;
for(int i = 0; i < list.size(); i++) {
if(list.get(i).equals("S")) {
answer += (int)Math.pow(Integer.parseInt(list.get(i-1)), 1);
count++;
} else if(list.get(i).equals("D")) {
answer += (int)Math.pow(Integer.parseInt(list.get(i-1)), 2);
count++;
} else if(list.get(i).equals("T")) {
answer += (int)Math.pow(Integer.parseInt(list.get(i-1)), 3);
count++;
} else if(list.get(i).equals("#")) {
if(count == 1) {
if(list.get(i-1).equals("S")) {
answer -= Integer.parseInt(list.get(i-2));
answer += Integer.parseInt(list.get(i-2)) * -1;
} else if(list.get(i-1).equals("D")) {
answer -= Math.pow(Integer.parseInt(list.get(i-2)), 2);
answer += Math.pow(Integer.parseInt(list.get(i-2)), 2) * -1;
} else if(list.get(i-1).equals("T")) {
answer -= Math.pow(Integer.parseInt(list.get(i-2)), 3);
answer += Math.pow(Integer.parseInt(list.get(i-2)), 3) * -1;
}
} else if(count == 2) {
if(list.get(i-1).equals("S")) {
answer -= Integer.parseInt(list.get(i-2));
answer += Integer.parseInt(list.get(i-2)) * -1;
} else if(list.get(i-1).equals("D")) {
answer -= Math.pow(Integer.parseInt(list.get(i-2)), 2);
answer += Math.pow(Integer.parseInt(list.get(i-2)), 2) * -1;
} else if(list.get(i-1).equals("T")) {
answer -= Math.pow(Integer.parseInt(list.get(i-2)), 3);
answer += Math.pow(Integer.parseInt(list.get(i-2)), 3) * -1;
}
} else {
if(list.get(i-1).equals("S")) {
answer -= Integer.parseInt(list.get(i-2));
answer += Integer.parseInt(list.get(i-2)) * -1;
} else if(list.get(i-1).equals("D")) {
answer -= Math.pow(Integer.parseInt(list.get(i-2)), 2);
answer += Math.pow(Integer.parseInt(list.get(i-2)), 2) * -1;
} else if(list.get(i-1).equals("T")) {
answer -= Math.pow(Integer.parseInt(list.get(i-2)), 3);
answer += Math.pow(Integer.parseInt(list.get(i-2)), 3) * -1;
}
}
} else if(list.get(i).equals("*")) {
if(count == 1) {
if(list.get(i-1).equals("S")) {
answer -= Integer.parseInt(list.get(i-2));
answer += (Integer.parseInt(list.get(i-2))) * 2;
} else if(list.get(i-1).equals("D")) {
answer -= Math.pow(Integer.parseInt(list.get(i-2)), 2);
answer += (Math.pow(Integer.parseInt(list.get(i-2)), 2)) * 2;
} else if(list.get(i-1).equals("T")) {
answer -= Math.pow(Integer.parseInt(list.get(i-2)), 3);
answer += (Math.pow(Integer.parseInt(list.get(i-2)), 3)) * 2;
}
} else if(count == 2) {
if(list.get(i-1).equals("S")) {
answer -= Integer.parseInt(list.get(i-2));
answer += Integer.parseInt(list.get(i-2)) * 2;
} else if(list.get(i-1).equals("D")) {
answer -= Math.pow(Integer.parseInt(list.get(i-2)), 2);
answer += (Math.pow(Integer.parseInt(list.get(i-2)), 2)) * 2;
} else if(list.get(i-1).equals("T")) {
answer -= Math.pow(Integer.parseInt(list.get(i-2)), 3);
answer += (Math.pow(Integer.parseInt(list.get(i-2)), 3)) * 2;
}
if(list.get(i-3).equals("S")) {
answer -= Integer.parseInt(list.get(i-4));
answer += (Integer.parseInt(list.get(i-4))) * 2;
} else if(list.get(i-3).equals("D")) {
answer -= Math.pow(Integer.parseInt(list.get(i-4)), 2);
answer += (Math.pow(Integer.parseInt(list.get(i-4)), 2)) * 2;
} else if(list.get(i-3).equals("T")) {
answer -= Math.pow(Integer.parseInt(list.get(i-4)), 3);
answer += (Math.pow(Integer.parseInt(list.get(i-4)), 3)) * 2;
}
if(list.get(i-4).equals("S")) {
if(list.get(i-3).equals("#")) {
answer -= (Integer.parseInt(list.get(i-5))*-1);
answer += (Integer.parseInt(list.get(i-5))*-1) * 2;
} else if(list.get(i-3).equals("*")) {
answer -= Integer.parseInt(list.get(i-5)) * 2;
answer += Integer.parseInt(list.get(i-5)) * 4;
}
} else if(list.get(i-4).equals("D")) {
if(list.get(i-3).equals("#")) {
answer -= (Math.pow(Integer.parseInt(list.get(i-5)), 2) * -1);
answer += (Math.pow(Integer.parseInt(list.get(i-5)), 2) * -1) * 2;
} else if(list.get(i-3).equals("*")) {
answer -= Math.pow(Integer.parseInt(list.get(i-5)), 2) * 2;
answer += Math.pow(Integer.parseInt(list.get(i-5)), 2) * 4;
}
} else if(list.get(i-4).equals("T")) {
if(list.get(i-3).equals("#")) {
answer -= (Math.pow(Integer.parseInt(list.get(i-5)), 3) * -1);
answer += (Math.pow(Integer.parseInt(list.get(i-5)), 3) * -1) * 2;
} else if(list.get(i-3).equals("*")) {
answer -= Math.pow(Integer.parseInt(list.get(i-5)), 3) * 2;
answer += Math.pow(Integer.parseInt(list.get(i-5)), 3) * 4;
}
}
} else if(count == 3) {
if(list.get(i-1).equals("S")) {
answer -= Integer.parseInt(list.get(i-2));
answer += (Integer.parseInt(list.get(i-2))) * 2;
} else if(list.get(i-1).equals("D")) {
answer -= Math.pow(Integer.parseInt(list.get(i-2)), 2);
answer += (Math.pow(Integer.parseInt(list.get(i-2)), 2)) * 2;
} else if(list.get(i-1).equals("T")) {
answer -= Math.pow(Integer.parseInt(list.get(i-2)), 3);
answer += (Math.pow(Integer.parseInt(list.get(i-2)), 3)) * 2;
}
if(list.get(i-3).equals("S")) {
answer -= Integer.parseInt(list.get(i-4));
answer += (Integer.parseInt(list.get(i-4))) * 2;
} else if(list.get(i-3).equals("D")) {
answer -= Math.pow(Integer.parseInt(list.get(i-4)), 2);
answer += (Math.pow(Integer.parseInt(list.get(i-4)), 2)) * 2;
} else if(list.get(i-3).equals("T")) {
answer -= Math.pow(Integer.parseInt(list.get(i-4)), 3);
answer += (Math.pow(Integer.parseInt(list.get(i-4)), 3)) * 2;
}
if(list.get(i-4).equals("S")) {
if(list.get(i-3).equals("#")) {
answer -= (Integer.parseInt(list.get(i-5))*-1);
answer += (Integer.parseInt(list.get(i-5))*-1) * 2;
} else if(list.get(i-3).equals("*")) {
answer -= Integer.parseInt(list.get(i-5)) * 2;
answer += Integer.parseInt(list.get(i-5)) * 4;
}
} else if(list.get(i-4).equals("D")) {
if(list.get(i-3).equals("#")) {
answer -= (Math.pow(Integer.parseInt(list.get(i-5)), 2) * -1);
answer += (Math.pow(Integer.parseInt(list.get(i-5)), 2) * -1) * 2;
} else if(list.get(i-3).equals("*")) {
answer -= Math.pow(Integer.parseInt(list.get(i-5)), 2) * 2;
answer += Math.pow(Integer.parseInt(list.get(i-5)), 2) * 4;
}
} else if(list.get(i-4).equals("T")) {
if(list.get(i-3).equals("#")) {
answer -= (Math.pow(Integer.parseInt(list.get(i-5)), 3) * -1);
answer += (Math.pow(Integer.parseInt(list.get(i-5)), 3) * -1) * 2;
} else if(list.get(i-3).equals("*")) {
answer -= Math.pow(Integer.parseInt(list.get(i-5)), 3) * 2;
answer += Math.pow(Integer.parseInt(list.get(i-5)), 3) * 4;
}
}
}
}
}
return answer;
}
}