[프로그래머스] [1차] 다트 게임

Narcoker·2022년 10월 12일
0

코딩테스트

목록 보기
46/150

문제

https://school.programmers.co.kr/learn/courses/30/lessons/17682

풀이

현재 문자가 숫자인 경우 score에 문자열 합 연산을 사용하여 숫자(문자열) 값을 갱신한다.
보너스 문자인 경우 score 값을 보너스 점수에 해당하는 만큼 score에 제곱 연산을한다.
옵션 문자인 경우 scoreLog의 맨 마지막 점수값(이전 점수값)과 score 값에 * 2 한다.
이 처리를 완료하고 다음 글자가 숫자이거나 없으면
scoreLog에 score 값을 push 한다.

문자열을 다 돈 후 scoreLog에 저장된 점수 값들을 모두 더해서 반환한다.

function solution(dartResult) {
    let scoreLog = [];
    let score = "";
    for (let i = 0; i < dartResult.length; i++) {
        if (Number.isInteger(dartResult[i] * 1)) { // 숫자인 경우
            score += dartResult[i];
        } else { // 숫자가 아니면
            switch (dartResult[i]) {
                case 'S':
                    score **= 1;
                    break;
                case 'D':
                    score **= 2;
                    break;
                case 'T':
                    score **= 3;
                    break;
                case '*':
                    scoreLog[scoreLog.length - 1] *= 2;
                    score *= 2;
                    break;
                case '#':
                    score *= -1;
                    break;
            }
            if (Number.isInteger(dartResult[i+1] * 1) || i+1 === dartResult.length ) {
                scoreLog.push(score);
                score = "";
            }          
        }
    }
    return scoreLog.reduce((sum, v)=> sum+=v);
}
profile
열정, 끈기, 집념의 Frontend Developer

0개의 댓글