class Solution {
public int solution(String dartResult) {
int answer = 0;
String ans = "";
int[] arr = new int[4];
int cnt =0;
for(int i=0; i<dartResult.length(); i++){
if(dartResult.charAt(i) == '*'){
arr[cnt-1] *=2;
if(cnt>1) arr[cnt-2]*=2;
}
else if(dartResult.charAt(i) == '#'){
arr[cnt-1] *= -1;
}
else if(dartResult.charAt(i) == 'S'){
// Math의 반환 타입은 double이기에 int로의 형 변환이 필요.
arr[cnt] = (int)Math.pow(arr[cnt],1);
cnt++;
}
else if(dartResult.charAt(i) == 'D'){
arr[cnt] = (int)Math.pow(arr[cnt],2);
cnt++;
}
else if(dartResult.charAt(i) == 'T'){
arr[cnt] = (int)Math.pow(arr[cnt],3);
cnt++;
}
else{
// char를 덧셈하면 문자열로 변환된다.
ans += dartResult.charAt(i);
// i+1이 0이라면 continue로 넘겨 10을 완성시키기
if(dartResult.charAt(i+1) == '0') continue;
arr[cnt] = Integer.parseInt(ans);
ans ="";
}
}
for(int i=0; i<arr.length; i++){
answer += arr[i];
}
return answer;
}
}
조건이 많기 때문에 하나하나 살펴보면서 구현해야한다. 첫번째 시도엔 아예 실패했고, 두번째 시도에 방향을 잡았다. int[3]이 아닌 int[4]를 준 이유는 영어문자 'S,D,T'에서 cnt++을 하는데 그렇되면 마지막 문자를 지나고나서 int배열의값은 4된다. 3으로 초기화 한다면 인덱스오류가 난다.