const isNum = (char) => !isNaN(parseInt(char));
const solution = (dartResult) => {
const limit = dartResult.length;
// i < dartResult.length와 같이 설정하면 매번 length를 계산하기 때문에 비효율적이라고 한다.
const arr = [];
let point;
for (let i = 0; i < limit; i++) {
const current = dartResult[i];
if (isNum(current)) {
if (isNum(dartResult[i + 1])) {
point = 10;
i++;
continue;
}
point = parseInt(current);
continue;
}
if (current == "S") {
if (i == limit - 1) {
arr.push(point);
break;
}
if (isNum(dartResult[i + 1])) {
arr.push(point);
}
continue;
}
if (current == "D") {
point = point ** 2;
if (i == limit - 1) {
arr.push(point);
break;
}
if (isNum(dartResult[i + 1])) {
arr.push(point);
}
continue;
}
if (current == "T") {
point = point ** 3;
if (i == limit - 1) {
arr.push(point);
break;
}
if (isNum(dartResult[i + 1])) {
arr.push(point);
}
continue;
}
if (current == "#") {
point *= -1;
arr.push(point);
continue;
}
if (current == "*") {
const previous = arr[arr.length - 1];
if (previous) {
arr[arr.length - 1] *= 2;
}
point *= 2;
arr.push(point);
continue;
}
}
return arr.reduce((acc, current) => acc + current);
};
도저히 함수형으로 답이 안 나와서 명령형으로 풀었더니...
이 문제는 정규표현식을 쓰냐 안 쓰냐가 너무 차이날 거 같은데 정규표현식을 공부를 해야 되나 ㅠ