문제 설명
카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트판에 다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임으로, 모두가 간단히 즐길 수 있다.
갓 입사한 무지는 코딩 실력을 인정받아 게임의 핵심 부분인 점수 계산 로직을 맡게 되었다. 다트 게임의 점수 계산 로직은 아래와 같다.
0~10의 정수와 문자 S, D, T, *, #로 구성된 문자열이 입력될 시 총점수를 반환하는 함수를 작성하라.
입력 형식
"점수|보너스|[옵션]"으로 이루어진 문자열 3세트.
예) 1S2D*3T
제한 사항
입출력 예
접근법
문자열 처리에 대한 이해도와 까다로운 조건을 구현할 수 있는지
확인하는 문제 같았다.
가장 어려웠던 부분은 숫자 처리와 자릿수 올림을
생각하는 부분이었다.
코드가 길어보이지만 실제로 실행 시간은 굉장히 짧다.
===========================================================
def solution(dartResult:str) -> int:
nums =[0]
for s in dartResult:
if s == 'S':
nums[-1] **= 1
nums.append(0)
elif s == 'D':
nums[-1] **= 2
nums.append(0)
elif s == 'T':
nums[-1] **= 3
nums.append(0)
elif s == '*':
#이전 값, 그 이전 값 모두 두 배 처리
nums[-2] *= 2
if len(nums) > 2:
nums[-3] *= 2
elif s == '#':
nums[-2] *= -1
else:
#자릿수 올림
nums[-1] = nums[-1] * 10 + int(s)
return sum(nums)