카카오톡에 뜬 네 번째 별! 심심할 땐? 카카오톡 게임별~

카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트판에 다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임으로, 모두가 간단히 즐길 수 있다.
갓 입사한 무지는 코딩 실력을 인정받아 게임의 핵심 부분인 점수 계산 로직을 맡게 되었다. 다트 게임의 점수 계산 로직은 아래와 같다.
0~10의 정수와 문자 S, D, T, *, #로 구성된 문자열이 입력될 시 총점수를 반환하는 함수를 작성하라.
"점수|보너스|[옵션]"으로 이루어진 문자열 3세트.
예) 1S2D*3T
점수는 0에서 10 사이의 정수이다.
보너스는 S, D, T 중 하나이다.
옵선은 *이나 # 중 하나이며, 없을 수도 있다.
3번의 기회에서 얻은 점수 합계에 해당하는 정수값을 출력한다.
dartResult : 1S2D*3T
37
사용한 변수는 다음과 같다.
answer : 점수 합계
stage : 보너스+[옵션]
score : 현재 기회 총 점수
prev_score : 이전 기회 총 점수
index : dartResult 문자열 중 현재 위치한 index
function solution(dartResult) {
var answer = 0;
let stage = '';
let index = 0;
let score = 0;
let prev_score = 0;
for(let i=0; i<3; i++) {
stage = '';
score = 0;
while(true) {
if(isNaN(parseInt(dartResult.charAt(index)))) break;
score += dartResult.charAt(index++);
}
score = parseInt(score);
while(true) {
if(!isNaN(parseInt(dartResult.charAt(index))) || index >= dartResult.length) break;
stage += dartResult.charAt(index++);
}
if(stage.charAt(0)==="D") {
score **= 2;
} else if(stage.charAt(0)==="T") {
score **= 3;
}
if(stage.length===2) {
if(stage.charAt(1)==="*") {
score *= 2;
prev_score *= 2;
} else {
score *= -1;
}
}
answer += prev_score;
prev_score = score;
}
answer += prev_score;
return answer;
}
스타상 때문에 중간에 막힐 뻔 했으나 prev_score 변수를 추가하여 간단하게 해결할 수 있었다. 프로그래머스 문제가 백준에 비해 지문이 긴 경우가 정말 많은 것 같다. 그리고 현실에 있을 법한 상황이 주어져 구현하는 재미가 더 있는 것 같다. 그렇기 때문에 Lv.1임에도 불구하고 문제가 쉽게 느껴지지 않는다. (풀이는 정말 쉬운 편이긴 한데..) 빠르게 Lv.2까지 달려서 여름 전까지는 Lv.3/골드 문제들을 풀어보고 싶다.