다트 게임
카카오톡에 뜬 네 번째 별! 심심할 땐? 카카오톡 게임별~
카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트판에 다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임으로, 모두가 간단히 즐길 수 있다.
갓 입사한 무지는 코딩 실력을 인정받아 게임의 핵심 부분인 점수 계산 로직을 맡게 되었다. 다트 게임의 점수 계산 로직은 아래와 같다.
0~10의 정수와 문자 S, D, T, *, #로 구성된 문자열이 입력될 시 총점수를 반환하는 함수를 작성하라.
입력 형식
점수|보너스|[옵션]으로 이루어진 문자열 3세트.
예) 1S2D*3T
점수는 0에서 10 사이의 정수이다.
보너스는 S, D, T 중 하나이다.
옵선은 *이나 # 중 하나이며, 없을 수도 있다.
출력 형식
3번의 기회에서 얻은 점수 합계에 해당하는 정수값을 출력한다.
예) 37
function solution(dartResult) {
let answer = 0,
top = -1,
stack = [];
for (let i = 0; i < dartResult.length; i++) {
if (dartResult[i] === 'S') {
stack[top] = Math.pow(stack[top], 1);
} else if (dartResult[i] === 'D') {
stack[top] = Math.pow(stack[top], 2);
} else if (dartResult[i] === 'T') {
stack[top] = Math.pow(stack[top], 3);
} else if (dartResult[i] === '*') {
stack[top] *= 2;
// 먼저 푸쉬된 값도 2배 곱해준다
if (top !== 0) {
stack[top - 1] *= 2;
}
} else if (dartResult[i] === '#') {
stack[top] *= -1;
} else {
// 10의 경우
if (dartResult[i] === '1' && dartResult[i + 1] === '0') {
stack.push(10);
i++;
} else {
// 10이 아닌 다른 숫자
stack.push(parseInt(dartResult[i], 10));
}
top++;
}
}
console.log(stack);
stack.forEach((element) => {
answer += element;
});
console.log(answer);
return answer;
}
if (dartResult[i] === '1' && dartResult[i + 1] === '0') {
stack.push(10);
i++;
}
for loop
의 인덱스를 증가시켜줬다. 프로그래머스에서 코드를 제출했을 때, 테스트 케이스 4, 6, 7에서 틀렸는데 아마도 10과 관련된 입력값이 있는 것 같다. 입력값을 죄다 10으로 주고 디버깅해서 최종 제출 완료했다. 저와 같은 테케에서 막히는 분들은 10D10T*10S 돌려보시길.. 정답은 2210이에요.