0~10의 정수와 문자 S,D,T,*,#로 구성된 문자열을 매개변수로 받아 총점수를 반환하는 함수를 작성하는 문제이다.
문자열을 숫자인지, 보너스인지, 옵션인지 판별하고 점수를 계산한다. 변수 num에 숫자를 넣어두고 다음 문자가 숫자일 경우 두자리 숫자로 판단, 다음 문자가 보너스일 경우 한자리 숫자로 판단하고 num을 0으로 초기화한다. 보너스 문자가 나와야 숫자가 나오는 부분이 끝난 것으로 판단하고 n을 증가시킨다.
class Solution {
public int solution(String dartResult) {
int answer = 0;
int[] score = new int[3];
int n = 0;
int num = 0;
for (int i = 0; i < dartResult.length(); i++) {
char c = dartResult.charAt(i);
// 숫자 판별
if (c >= '0' && c <= '9') {
int ic = Integer.parseInt(String.valueOf(c));
if (ic == 0 && num > 0) {
score[n] = num * 10 + ic;
} else {
num = ic;
score[n] = ic;
}
}
// S, D, T 판별
if (c == 'S' || c == 'D' || c == 'T') {
num = 0;
if (c == 'D') {
score[n] = score[n] * score[n];
} else if (c == 'T' ) {
score[n] = score[n] * score[n] * score[n];
}
n++;
}
// *, # 판별
if (c == '*') {
if (n == 1) {
score[0] = score[0] * 2;
} else {
score[n-2] = score[n-2] * 2;
score[n-1] = score[n-1] * 2;
}
} else if (c == '#') {
score[n-1] = (-1) * score[n-1];
}
}
// 점수 총합
for (int i = 0; i < score.length; i++) {
answer += score[i];
}
return answer;
}
}