문제설명
- 총 3번의 기회로 구성
- 각 기회마다 0점에서 10점까지 얻음
- 점수와 함께 Single(S), Double(D), Triple(T) 영역 존재
- 각 영역 당첨시 점수에 1제곱, 2제곱, 3제곱으로 계산
- 옵션으로 스타상( * ), 아차상( # ) 존재
- 스타상은 해당 점수와 바로 전에 얻은 점수를 2배, 아차상은 해당 점수에 -1배
- 스타상은 첫번째 기회에서도 나올수 있고 이 경우 첫번째 스타상의 점수만 2배
- 스타상은 다른 스타상, 아차상과 효과 중첩 가능
- S, D, T는 점수마다 하나씩 존재
- 스타상, 아차상은 둘 중 하나만 존재하며 존재하지 않을 수도 있음

풀이
function solution(dartResult) {
let sum;
let answer = [];
const dartResultArr = dartResult.split('');
dartResultArr.map((point,idx)=>{
if(dartResultArr[idx] === '1' && dartResultArr[idx+1] === '0'){
if(idx>0){
answer.push(sum);
sum = 10;
}else{
sum = 10;
}
}else if(point.charCodeAt()>=48 && point.charCodeAt()<=57){
if(dartResultArr[idx-1] !== '1'){
if(idx>0){
answer.push(sum);
sum = Number(point);
}else{
sum = Number(point);
}
}
}
if(point === 'S')
sum *= 1;
else if(point === 'D')
sum **= 2;
else if(point === 'T')
sum **= 3;
else if(point === '#')
sum *= -1;
else if(point === '*'){
if(idx===2||idx===3){
sum *= 2;
}else{
answer[answer.length-1] *= 2;
sum *= 2;
}
}
if(idx === dartResult.length-1){
answer.push(sum);
}
})
sum = 0;
answer.map(num=>sum +=num);
return sum;
}
체크포인트
- 0~9인 경우와 10일때 경우를 나눠 문제해결하는 방법을 찾기
- 문제설명을 제대로 읽고 헛수고(?) 줄이기(ex. 스타상 조건...)