문제



풀이
import java.util.*;
class Solution {
public int solution(String dartResult) {
int answer = 0;
int n=0; int index=0;
String numStr="";
int[] dart = new int[3];
for(int i=0; i<dartResult.length(); i++){
char ch = dartResult.charAt(i);
//1.숫자인경우
if(Character.isDigit(ch)==true){
numStr+=String.valueOf(ch);
}
//2.보너스
else if(ch == 'S' || ch=='D' || ch=='T'){
n=Integer.parseInt(numStr);
if(ch=='S') dart[index++] = (int) Math.pow(n,1);
else if(ch=='D') dart[index++] = (int) Math.pow(n,2);
else dart[index++] = (int) Math.pow(n,3);
numStr="";
}
//3.옵션
else{
if(ch=='*'){
dart[index-1]*=2;
if(index-2>=0) dart[index-2]*=2;
}
else if(ch=='#') {
dart[index-1]*=(-1);
}
}
}
answer=dart[0]+dart[1]+dart[2];
return answer;
}
}
- 다트 게임 크기는 3번으로 고정된다. int[] dart 크기 3으로 생성
- Character.isDigit()를 이용해서 문자가 숫자인지를 판별한다.
- 임의의 문자 numStr에 숫자인 문자 ch를 String.valueOf()로 담는다.
- 이제 보너스. 구간을 나눠준다. S , D , T 일 경우 마다 numStr에 있는 문자를 숫자로 만들고 n이라고 해주고, 그 n을 경우에 따라 Math.pow()를 이용해서 제곱해준 다음, dart[index++]에 저장해준다. 바로 다음게임을 겨냥 하기위해서 index++을 해준다. 그 후 numStr 초기화.
- 마지막 옵션이다. '*'일 경우 해당문자를 제곱해주고 해당하는 문자 전 문자도 있으면 제곱해준다. '#'일 경우에는 해당문자를 -1을 곱해줘서 음수로 만든다.
- dart[]를 다 더해서 answer에 담으면 끝.