문제 링크

문제 풀이

구현 문제이다.
결국 dartResult의 모든 요소를 다 점검해야하므로 시간복잡도는 n이 된다.

가능한 가독성 좋게 풀려고 했다.

  1. 10 체크
  2. 0-9 체크
  3. 이외 문자 체크 => cal() 호출

전체 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
function solution(dartResult) {
const darts = dartResult.split("");
let scores = [0, 0, 0];
let i = -1;

const cal = (input) => {
switch (input) {
case "D":
scores[i] = Math.pow(scores[i], 2);
break;
case "T":
scores[i] = Math.pow(scores[i], 3);
break;
case "*":
scores[i] = scores[i] * 2;
if (i > 0) scores[i - 1] = scores[i - 1] * 2;
break;
case "#":
scores[i] = scores[i] * -1;
break;
case "S":
default:
break;
}
};

while (darts.length > 0) {
const now = darts.shift();
if (now === "1" && darts[0] === "0") {
i++;
darts.shift();
scores[i] = 10;
} else if (now < 10) {
i++;
scores[i] = parseInt(now);
} else cal(now);
}

return scores.reduce((acc, cur) => acc + cur);
}