프로그래머스 - 다트 게임 👈문제 보러가기
시도해본 답안
function solution(dartResult) {
let result = 0;
// split 을 써보면 어떨까?
let answer = dartResult.replace(/S/g, 1).replace(/D/g, 2).replace(/T/g, 3).split('*')
console.log(answer)
for (let i = 0; i < answer.length; i++) {
if (answer[i].length === 2) {
result += answer[i][0]**answer[i][1] *2
} else if (answer[i].length > 2 && answer[i].length %2 === 0) {
for (let j=0; j< answer[i].length; j++) {
result += answer[j][0]**answer[j][1] *2
}
}
}
return result;
}
replace()를 사용해서 숫자로 바꾸고 split()을 사용해서 '*' 기준으로 나눈후 각각 처리하려고 했었다.
그런데 생각처럼 간단하지가 않아서 중도에 접었다.
모범 답안
function solution(dartResult) {
let answer = [];
let tmp = 0;
for(let i=0; i<dartResult.length; i++) {
if(dartResult[i].match(/[0-9]/)) {
if(dartResult[i]==='1' && dartResult[i+1]==='0') {
tmp=10;
i++;
}
else tmp=dartResult[i];
}
else if(dartResult[i] === 'S') answer.push(Math.pow(tmp, 1));
else if(dartResult[i] === 'D') answer.push(Math.pow(tmp, 2));
else if(dartResult[i] === 'T') answer.push(Math.pow(tmp, 3));
else if(dartResult[i] ==='*') {
answer[answer.length-1] *= 2;
answer[answer.length-2] *= 2;
}
else if(dartResult[i] === '#') answer[answer.length-1] *= (-1);
}
return answer.reduce((acc, v) => acc+v);
}
코드 설명