카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트판에 다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임으로, 모두가 간단히 즐길 수 있다.
갓 입사한 무지는 코딩 실력을 인정받아 게임의 핵심 부분인 점수 계산 로직을 맡게 되었다. 다트 게임의 점수 계산 로직은 아래와 같다.
0~10의 정수와 문자 S, D, T, *, #로 구성된 문자열이 입력될 시 총점수를 반환하는 함수를 작성하라.
"점수|보너스|[옵션]"으로 이루어진 문자열 3세트.
예) 1S2D*3T
3번의 기회에서 얻은 점수 합계에 해당하는 정수값을 출력한다.
예) 37

조건문을 쪼개서 문제에서 설명한대로 구현하면 된다.
점수가 0~10까지이므로 10일 때와 한 자릿수일 때를 구분해줘야 한다.
tmp에 현재 값을 담고 sum에 연산이 끝난 값들을 넣어준다.
그리고 마지막에 sum에 있는 값들을 reduce로 다 더해서 반환해주면 된다.
function solution(dartResult) {
let sum = [];
let tmp = 0;
for (let i=0; i<dartResult.length; i++) {
if (!isNaN(dartResult[i])) { //숫자이면
//10일 때
if (dartResult[i] == 0 && dartResult[i-1] == 1) {
tmp = 10;
//0~9일 때
} else {
tmp = dartResult[i];
}
}
if (dartResult[i] === 'S') {
sum.push(Math.pow(tmp, 1));
}
if (dartResult[i] === 'D') {
sum.push(Math.pow(tmp, 2));
}
if (dartResult[i] === 'T') {
sum.push(Math.pow(tmp, 3));
}
if (dartResult[i] === '*') {
sum[sum.length-1] *= 2;
sum[sum.length-2] *= 2;
}
if (dartResult[i] === '#') {
sum[sum.length-1] *= (-1);
}
}
return sum.reduce((acc, cur) => acc + cur);
}