호지

[프로그래머스] 1차 다트 게임 문제풀이 JS 본문

알고리즘/프로그래머스

[프로그래머스] 1차 다트 게임 문제풀이 JS

_hoji

dartResult를 탐색하면서 확인해야할 것은 다음과 같다.

1) 점수인지 판별

점수는 0-10이 가능하기 때문에 0점~9점은 문자 한개로 판별이 가능하나,

10점 판별을 위해 다음 문자가 0인지 확인한다.

여기서 구한 점수는 scores 배열에 넣는다.

 

2) SDT로 제곱

S는 1제곱이므로 값은 그대로 유지가 되고,

D는 2제곱이므로 scores에 가장 최근 점수에 2제곱을 하고,

T는 3제곱이므로 scores에 가장 최근 점수에 3제곱을 하고 한다.

 

3) 스타상(*) 판별

스타상은 제일 앞에서 나왔을 경우엔 가장 최근 점수에만 2배를

그 외의 경우엔 가장 최근 점수와 그 앞의 점수에 2배를 한다.

 

4) 아차상(#) 판별

아차상은 가장 최근 점수에만 -1배를 한다.

 

각각을 탐색하면서 바뀌는 점수는 scores를 업데이트한다.

결과적으로 점수는 3개이므로

scores[0], scores[1], scores[2]를 더한 값을 return하면

원하는 결과를 얻을 수 있다.

 

function solution(dartResult) {
  let scores = [],
    score
  for (let i = 0; i < dartResult.length; i++) {
    if (!isNaN(dartResult[i])) {
      score = parseInt(dartResult[i])
      if (dartResult[i + 1] === '0') {
        i++
        score = 10
      }
      scores.push(score)
    } else if (dartResult[i] === 'D') {
      score = scores.pop()
      scores.push(score ** 2)
    } else if (dartResult[i] === 'T') {
      score = scores.pop()
      scores.push(score ** 3)
    } else if (dartResult[i] === '*') {
      let score = scores.pop()
      if (scores.length !== 0) {
        let temp = scores.pop()
        scores.push(temp * 2)
      }
      scores.push(score * 2)
    } else if (dartResult[i] === '#') {
      let score = scores.pop()
      scores.push(score * -1)
    }
  }
  return scores[0] + scores[1] + scores[2]
}

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

Comments