반응형
https://programmers.co.kr/learn/courses/30/lessons/17682?language=javascript
다트 게임의 계산 로직을 풀어보았다.
*의 경우 자신과 뒤에 값에 2를 곱해주어야 해서 가장 나중에 계산하려고 했다.
따라서 S, D, T, #의 경우에 계산되는 값을 먼저 계산하였다.
이 과정에서 reduce를 사용하여 유일한 두 자리 숫자인 10은 이전 값과 현재 값을 문자열 더하기로 합쳐주었다.
그 후에 *을 찾고, 값을 계산하고 splice로 *을 없애주었다.
이 때문에 forEach가 아닌 for문을 사용하였다.
마지막으로 reduce로 누적 계산하여 답을 도출했다.
나의 풀이
function solution(dartResult) {
const resultList = [];
const vonus = ["S", "D", "T"];
const option = ["*", "#"];
let answer;
dartResult.split("").reduce(function (accValue, curValue) {
if (vonus.includes(curValue)) {
if (curValue === "S") {
resultList.push(parseInt(accValue));
return accValue = "";
} else if (curValue === "D") {
resultList.push(parseInt(accValue) ** 2);
return accValue = "";
}
resultList.push(parseInt(accValue) ** 3);
return accValue = "";
} else if (option.includes(curValue)) {
if (curValue === "#") {
resultList[resultList.length - 1] = -resultList[resultList.length - 1];
return accValue = "";
}
resultList.push(curValue);
return accValue = "";
}
return accValue + curValue;
});
for (let i = 0; i < resultList.length; i++) {
if (resultList[i] === "*" && i === 1) {
resultList[0] = resultList[0] * 2;
resultList.splice(i, 1);
i -= 1;
} else if (resultList[i] === "*") {
resultList[i - 1] = resultList[i - 1] * 2;
resultList[i - 2] = resultList[i - 2] * 2;
resultList.splice(i, 1);
i -= 1;
}
}
return answer = resultList.reduce((accValue, curValue) => accValue + curValue);
}
반응형
'IT > Algorithm' 카테고리의 다른 글
프로그래머스) 상호 평가 (0) | 2021.10.08 |
---|---|
Quick Sort (0) | 2021.10.08 |
Merge sort (0) | 2021.10.02 |
프로그래머스) 체육복 (0) | 2021.10.01 |
프로그래머스) 최소 직사각형 (0) | 2021.10.01 |