개발 공부/알고리즘 문제 풀이

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

종범2 2020. 6. 2. 22:22

문제

프로그래머스 2018 KAKAO BLIND RECRUITMENT [1차] 다트게임

 

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

 

코딩테스트 연습 - [1차] 다트 게임

 

programmers.co.kr

언어

바스크립트(JavaScript)

 

접근 방법

  1. 다트 숫자가 10인 경우와 아닌 경우로 분리한다. 10인 경우는 index를 하나 더 늘려서 검사해야 하기 때문이다.
  2. 보너스가 D면 제곱, T면 세제곱을 한다.
  3. 옵션이 *면 2를 곱하고 이전 값이 존재하면 그 값도 2를 곱한다.
  4. 옵션이 #이면 -1을 곱한다.
  5. 배열에 저장한다.
  6. 배열 값을 모두 더한다.

코드

function solution(dartResult) {
    let answer = 0;
    let numArr = [];
    for (let i=0; i<dartResult.length; i=i+2){
        let point;
        // 10인 경우와 아닌 경우로 분리
        if(i+1<dartResult.length && dartResult[i+1] === '0'){
            point = 10;
            i++
        }else{
            point = parseInt(dartResult[i]); 
        }
        let bonus = dartResult[i+1];
        // D면 제곱, T 면 세제곱
        if(bonus === 'D'){
            point *= point;   
        }else if (bonus === 'T'){
            point *= point*point;
        }
        // * 이면 현재 값과 이전값 2배, #이면 현재값 -1
        if(i+2<dartResult.length && dartResult[i+2] === '*'){
            point *= 2;
            if(numArr.length !==0){
                numArr[numArr.length-1] *= 2;
            }
            i++
        }else if (i+2<dartResult.length && dartResult[i+2] === '#'){
            point *= -1;   
            i++;
        }
        numArr.push(point);
    }
    console.log(numArr);
    for (let i=0; i<numArr.length; i++){
        answer += numArr[i];
    }
    return answer;      
}

복기

  1. 어렵지 않게 풀었다.