문제 설명
다트 게임
카카오톡에 뜬 네 번째 별! 심심할 땐? 카카오톡 게임별~
Game Star
카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트판에 다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임으로, 모두가 간단히 즐길 수 있다.
갓 입사한 무지는 코딩 실력을 인정받아 게임의 핵심 부분인 점수 계산 로직을 맡게 되었다. 다트 게임의 점수 계산 로직은 아래와 같다.
0~10의 정수와 문자 S, D, T, *, #로 구성된 문자열이 입력될 시 총점수를 반환하는 함수를 작성하라.
입력 형식
"점수|보너스|[옵션]"으로 이루어진 문자열 3세트.
예) 1S2D*3T
출력 형식
3번의 기회에서 얻은 점수 합계에 해당하는 정수값을 출력한다.
예) 37
function solution(dartResult) {
let arr = [];
let num = 0;
for (let i = 0; i < dartResult.length; i++) {
// 정규식으로 숫자 찾을 때 10 구분하기
if (dartResult[i].match(/[0-9]/)) {
if (dartResult[i] === '1' && dartResult[i + 1] === '0') {
num = 10;
// 10 찾으면 다음 0 패스해야되기 때문에 i++
i++;
} else {
num = dartResult[i];
}
}
switch (dartResult[i]) {
// 'S':1제곱
case 'S':
arr.push(Math.pow(num, 1));
break;
//'D':2제곱
case 'D':
arr.push(Math.pow(num, 2));
break;
// 'T':3제곱
case 'T':
arr.push(Math.pow(num, 3));
break;
// 해당 숫자는 직전에 arr에 push되었던 arr[arr.length - 1]인 값
// '*':배열에 숫자 1개 있으면 해당 숫자만 *2 or 2개 있으면 해당 숫자, 앞 숫자 *2
case '*':
if (arr.length === 1) {
arr[arr.length - 1] *= 2;
} else {
arr[arr.length - 1] *= 2;
arr[arr.length - 2] *= 2;
}
break;
// '#': 해당 숫자만 *-1
case '#':
arr[arr.length - 1] *= -1;
break;
default:
break;
}
}
const answer = arr.reduce((acc, cur) => acc + parseInt(cur), 0);
return answer;
}