function solution(dartResult) {
var answer = 0;
let len = dartResult.length;
let score = [];
let idx = 0;
for(let i = 0; i < len; i++) {
if (isNumber(dartResult[i])) {
if (isNumber(dartResult[i + 1])) {
score.push(10)
idx = score.length - 1;
i++;
continue;
} else {
score.push(Number(dartResult[i]));
idx = score.length - 1;
continue;
}
}
switch(dartResult[i]) {
case 'S':
score[idx] = Math.pow(score[idx], 1)
break;
case 'D':
score[idx] = Math.pow(score[idx], 2)
break;
case 'T':
score[idx] = Math.pow(score[idx], 3)
break;
case '*':
if (idx === 0) {
score[idx] = score[idx] * 2
} else {
score[idx - 1] = score[idx - 1] * 2
score[idx] = score[idx] * 2
}
break;
case '#':
score[idx] = score[idx] - (2 * score[idx]);
break;
}
}
answer = score.reduce((acc, cur) => acc += cur);
return answer;
}
function isNumber (char) {
let num = Number(char);
if(num >= 0 && num <= 9) {
return true;
}
}
이렇게 푸는게 맞나? 싶을 정도의 “구현 원 툴” 문제라고 느꼈습니다. 물론 구현력이 부족해 시간이 많이 걸렸네요… 그나마 혼자 힘으로 풀 수 있었다는게 다행입니다.
더 좋은 풀이가 뭐가 있을지 궁금하네요.
다른 사람들의 풀이를 좀 보니 정규식을 이용해 걸러내는 부분이 많네요. 저는 아직 정규식을 몰ㄹ…. 허허
숫자 거르는 부분, 스위치 문 부분 또한 함수로 나누는게 더 깔끔했을것 같네요.
멋지게 풀진 못해도 깔끔하게 풀 수 있도록 연습해야겠습니다. 주어진 실력 내에서 최대한 잘 풀어내는 방법은 "깔끔하게 푸는 것" 같네요.