링크

다트게임 - 2018 카카오 블라인드

난이도

문제 요약

  • 주어진 다트게임 계산 공식을 적용하여 점수 계산

초반 접근

  • 점수계산식을 정리, 숫자와 문자를 분리하여 계산을 적용

해결법

  • 숫자기준, 문자기준으로 문자열을 분리하여 [다트가 얻은 점수],[영역]배열을 분리함
  • 해당 배열을 순회하면서 S,D,T는 해당 점수에 대해서만 계산
  • *는 이전배열과 현재 배열 index의 값을 2배로
  • #은 현재 배열만 -1곱하기

알고리즘 간단 정리

  • dartResult문자열에서 숫자를 기준으로 area,문자를 기준으로 number로 분리한다.
    • 1s2d*4f이면 area=[’s’,’d*’,’f’] number=[1,2,4]
    • 이를 위해 정규식을 이용하였다.
      • 문자기준 분리 dartResult.split(/\d/)
      • 숫자기준 분리 dartResult.split(/\D/)
  • 나온 배열의 갯수만큼 반복문 실행 i=0->number.length까지
    • area[i]의 길이가 1인경우
      • number[i]에 대해 S(number[i]^1),D(number[i]^2),T(number[i]^3)을 계산하여 result[i]에 입력
    • area[i]의 길이가 1보다 큰경우 = *이나#이 존재
      • area[i][0]은 SDT를 계산하여 result[i]에 입력
      • area[i][1]
        • *은 result[i-1]*2, result[i]*2를 진행
        • *이 나왔을때 i-1이 0보다 작으면 result[i]*2만 수행
        • #은 result[i]*(-1)을 진행
  • result를 순회하며 모든 요소를 더하기

후기

  • 문제에서 제공한 로직을 얼마나 정확하게 구현하는지가 핵심인 문제였다.
  • 문제의 로직을 최대한 정확하게 정리하여 구현하면서 헷갈리지 않도록 해야한다.
  • 중간에 로직을 잘못 이해하면 시간이 오래 걸리는 문제이므로 중간에 못본 조건이 있는지 확인해야 한다.

아이디어

  • 문제에 답이 있다