카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트판에 다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임으로, 모두가 간단히 즐길 수 있다.
갓 입사한 무지는 코딩 실력을 인정받아 게임의 핵심 부분인 점수 계산 로직을 맡게 되었다. 다트 게임의 점수 계산 로직은 아래와 같다.
획득점수|보너스|옵션 으로 입력된다.
천천히 문제를 그대로 옮겨 적어주면 되는 문제였습니다.
인덱스를 잘 조정하는 것이 핵심인 문제였습니다.
class Solution {
public int solution(String dartResult) {
// 각 라운드에서 획득한 점수 (총 3개 라운드)
int[] round = new int[3];
char[] carr = dartResult.toCharArray();
// 인덱스 조정을 위해 -1부터 시작 매 반복마다 증가시켜야 하는데 첫 번째 반복에서는 0이 되도록
int idx = -1;
for (int i=0;i<carr.length;i++) {
// n번째 라운드에 쏜 점수가 0~9인 경우
if (carr[i] >= '0' && carr[i] <= '9') {
idx++; // 이전 라운드에서 현재 라운드로 증가된 것 (-1 -> 0)
// 점수 추가
round[idx] += Integer.parseInt(String.valueOf(carr[i]));
// n번째 라운드에 쏜 점수가 10점인 경우
if (i+1!=carr.length-1 && carr[i+1] == '0'&& carr[i] == '1') {
round[idx] -= Integer.parseInt(String.valueOf(carr[i]));
round[idx] = 10;
i++;
}
} else if (carr[i] == 'D') { // 보너스 Double
round[idx] *= round[idx]; // 제곱
} else if(carr[i] == 'T') { // 보너스 Triple
round[idx] *= round[idx] * round[idx]; // 세제곱
} else if (carr[i] == '*') { // 이전 라운드와 현재 라운드에 *2
if (idx > 0) round[idx-1] *=2;
round[idx] *= 2;
} else if (carr[i] == '#') { // 현재 라운드에 * -1
round[idx] *= -1;
}
}
return round[0] + round[1] + round[2];
}
}