코딩테스트
[파이썬] 다트 게임 - 2018 KAKAO BLIND RECRUITMENT [CODING TEST #26]
ALTERww
2022. 7. 29. 14:16
320x100
https://school.programmers.co.kr/learn/courses/30/lessons/17682
re 패키지를 이용하여 S,D,T에 대해 나누고, score 리스트에 제곱할 숫자 1,2,3을 먼저 할당한다.
dartlist 리스트는 보너스와 점수가 합쳐진 문자열로 구성된다.
이렇게 나눈 케이스의 경우, 보너스는 해당 인덱스가 아니라 이전 인덱스에 저장된 점수가 해당 횟수에 적용된다.
어떠한 케이스에도 점수의 배수인 S,D,T가 포함될 뿐만 아니라, 두 자리 숫자인 10점 또한 인덱싱으로 쉽게 얻어오기 위해 이 방법으로 진행했다.
enumerate를 이용해서 보너스 #,*가 있는지 없는지를 잘 구분하여 점수를 제곱하고 보너스를 적용시키면 된다.
점수를 먼저 제곱하면, 보너스가 어떤 순서로 들어와도 결과에는 영향을 끼치지 않으므로 순서를 잘 구성해서 짜면 문제 없이 통과할 수 있다.
import re
def solution(dartResult):
answer = 0
score=[]
dartlist = re.split('S|D|T',dartResult)
for alpha in dartResult:
if alpha.isalpha():
if alpha == 'S':
score.append(1)
elif alpha == 'D':
score.append(2)
else:
score.append(3)
for idx, dart in enumerate(dartlist):
if len(dart)>0:
if dart[0].isdigit(): # bonus 없음
score[idx] = int(dart) ** score[idx]
else: # bonus!
if len(dart)>1 : # bonus + number
score[idx] = int(dart[1:]) ** score[idx]
if dart[0] == '*' : # 해당 score, 이전 score 2배.
score[idx-1] *= 2
if idx>1:
score[idx-2] *= 2
else: # 해당 score -배.
score[idx-1] = -score[idx-1]
answer = sum(score)
return answer