어렵지 않아 보인 문제였는데 생각보다 잘 안 풀려서 여기를 참고했다.
function solution(dartResult) {
let score = [];
let temp = 0; // 숫자를 담을 변수
for (let i = 0; i < dartResult.length; i++) {
if (!isNaN(dartResult[i])) {
if (dartResult[i] === '1' && dartResult[i + 1] === '0') {
temp = 10;
i++;
} else {
temp = Number(dartResult[i]);
}
}
else if (dartResult[i] === 'S') score.push(temp);
else if (dartResult[i] === 'D') score.push(Math.pow(temp, 2));
else if (dartResult[i] === 'T') score.push(Math.pow(temp, 3));
else if (dartResult[i] === '#') score[score.length - 1] *= -1;
else if (dartResult[i] === '*') {
score[score.length - 1] *= 2;
score[score.length - 2] *= 2;
}
}
return score.reduce((a, b) => a + b, 0);
}
기존 코드에서 내가 바꿔준 부분은 2가지이다.
dartResult[i] >= 0 && dartResult[i] <= 9
대신 isNaN 메서드 사용하기dartResult의 for문도 dartResult[i]
부분이 반복되어 map 같은 고차 함수로 줄이려고 해봤지만 map을 사용하면 i + 1이 들어가는 dartResult[i] === '1' && dartResult[i + 1] === '0'
부분이 작동하지 않길래 그냥 뒀다.
카카오 블라인드 테스트 문제였다
feat. 아이유 사진