본문 바로가기

알고리즘/Lv. 1

프로그래머스 17682 다트 게임 자바스크립트 풀이

728x90

난이도 : Lv. 1

풀이일 : 2412242

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


문제


풀이 코드

function solution(dartResult) {
    let answer = []
    nums = dartResult.replaceAll('10', 'X')
    bonus = {'S': 1, 'D': 2, 'T': 3}
    
    for (n of nums) {
        if (n in bonus) {
            answer[answer.length - 1] **= bonus[n]
        }
        else if (n == '*') {
            answer[answer.length - 1] *= 2
            answer[answer.length - 2] *= 2
        }
        else if (n == '#') {
            answer[answer.length - 1] *= -1
        }
        else {
            answer.push(n != 'X' ? Number(n) : 10)
        }
    }

    return answer.reduce((acc, cur) => acc + cur)
}
  • 숫자는 0 ~ 10까지 있으므로 10이 한 글자씩 잘려 1, 0으로 처리되지 않도록 X로 치환
  • S, D, T 보너스 정보 저장
  • nums에 있는 모든 요소에 대해 각 분류에 맞는 작업을 수행
    • 만약 보너스에 해당하는 S, D, T가 주어지면, answer 배열에 가장 최근에 저장된 숫자 bonus 승을 계산해 재할당
    • *이 주어진다면, 최근 두 숫자에 *2
    • #이 주어진다면 최근 숫자에 * -1
    • 그 외는 숫자가 주어지므로 주어진 숫자를 answer 배열에 추가
  • 최종적으로 저장된 숫자들의 합을 리턴

실행화면


느낀점

  • 자스는 자바랑 더 비슷한 거 같기도 하고 파이썬이랑 더 비슷한 것 같기도 하고
  • answer 배열에 저장된 숫자가 한 개 밖에 없어서 이상한 요소에 접근하려고 해도 에러를 안내서 좋다. 될거 같아서 해봤는데 진짜 됨!