-
17682. [1차] 다트 게임(Python, Programmers Level 1)Programmers 2022. 9. 7. 21:45
문제 설명
다트 게임의 결과 점수를 반환합니다.
입력
dartResult: 점수|보너스|[옵션] 으로 이루어진 문자열
* 0 <= 점수 <= 10
* 보너스
- S: 점수를 1제곱
- D: 점수를 2제곱
- T: 점수를 3제곱
* 옵션
- *: 현재와 직전 점수를 각 2배로 만듬
- #: 해당 점수를 마이너스 함
풀이
경기 여러개가 주어지는데, 각 경기가 시작되는 위치만 잘 찾는다면 쉽게 해결할 수 있는 문제입니다.
또한, 옵션 '*'의 존재로 인해 각 경기를 바로 결과에 더하는 대신 쌓아두는 것이 유리할 것입니다.
코드
더보기def solution(dartResult): scores = [] for i, c in enumerate(dartResult): if c.isnumeric() and (not scores or not dartResult[i - 1].isnumeric()): scores.append(int(c)) elif c.isnumeric(): scores[-1] = scores[-1] * 10 + int(c) elif c == 'S': scores[-1] **= 1 elif c == 'D': scores[-1] **= 2 elif c == 'T': scores[-1] **= 3 elif c == '*': scores[-1] *= 2 if 2 <= len(scores): scores[-2] *= 2 elif c == '#': scores[-1] *= -1 return sum(scores) if __name__ == '__main__': result = solution("1S2D*3T") print(37 == result, result) result = solution("1D2S#10S") print(9 == result, result) result = solution("1D2S0T") print(3 == result, result) result = solution("1S*2T*3S") print(23 == result, result) result = solution("1D#2S*3S") print(5 == result, result) result = solution("1T2D3D#") print(-4 == result, result) result = solution("1D2S3T*") print(59 == result, result)
'Programmers' 카테고리의 다른 글
82612. 부족한 금액 계산하기(Python, Programmers Level 1) (0) 2022.09.07 87389. 나머지가 1이 되는 수 찾기(Python, Programmers Level 1) (0) 2022.09.07 12901. 2016년(Python, Programmers Level 1) (0) 2022.09.07 68644. 두 개 뽑아서 더하기(Python, Programmers Level 1) (0) 2022.09.07 12982. 예산(Python, Programmers Level 1) (0) 2022.09.07