function solution(dartResult) {
let curNum = 0,
newArr = [],
numArr = [],
signArr = new Array(3).fill("");
for (let i = 0; i < dartResult.length; i++) {
if (dartResult[i] === "1" && dartResult[i + 1] === "0") {
newArr.push("10");
i++;
} else {
newArr.push(dartResult[i]);
}
}
newArr.reduce((acc, cur, idx) => {
if (/\d/.test(cur)) {
curNum = Number(cur);
return acc;
} else if (/[A-Z]/.test(cur)) {
if (cur === "S") {
numArr.push(curNum);
} else if (cur === "D") {
numArr.push(Math.pow(curNum, 2));
} else {
numArr.push(Math.pow(curNum, 3));
}
} else {
if (idx === 2) {
signArr[0] = cur;
} else if (idx === 4 || idx === 5) {
signArr[1] = cur;
} else {
signArr[2] = cur;
}
}
}, 0);
for (let i = 0; i < 3; i++) {
if (signArr[i] === "*") {
numArr[i] *= 2;
if (i !== 0) {
numArr[i - 1] *= 2;
}
} else if (signArr[i] === "#") {
numArr[i] *= -1;
}
}
return numArr.reduce((acc, cur) => acc + cur, 0);
}
되게 가볍게 접근했는데 너무 돌아온 것 같다.
계산된 점수 배열과 기호 배열을 구한다음 기호 배열에 맞춰서 총합을 반환하는 방식이다.
출처: 프로그래머스 코딩 테스트 연습,