링크
다트게임 - 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를 순회하며 모든 요소를 더하기
후기
- 문제에서 제공한 로직을 얼마나 정확하게 구현하는지가 핵심인 문제였다.
- 문제의 로직을 최대한 정확하게 정리하여 구현하면서 헷갈리지 않도록 해야한다.
- 중간에 로직을 잘못 이해하면 시간이 오래 걸리는 문제이므로 중간에 못본 조건이 있는지 확인해야 한다.
아이디어