2018 KAKAO BLIND RECRUITMENT 문제
https://school.programmers.co.kr/learn/courses/30/lessons/17682
다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임
다트 게임의 점수 계산 로직은 아래와 같다.
0~10의 정수와 문자 S, D, T, *, #로 구성된 문자열이 입력될 시 총점수를 반환하는 함수를 작성하라.
"점수|보너스|[옵션]"으로 이루어진 문자열 3세트.
예) 1S2D*3T
3번의 기회에서 얻은 점수 합계에 해당하는 정수값을 출력한다.
예) 37
area = ["S", 'D', 'T']
def solution(dartResult):
# 점수 집계할 리스트
sco = []
temp = 0
for i in range(len(dartResult)):
if dartResult[i] in area:
temp = temp ** (area.index(dartResult[i]) + 1)
sco.append(temp)
temp = 0
elif dartResult[i] == '*':
if len(sco) >= 2:
sco[-1] = sco[-1] * 2
sco[-2] = sco[-2] * 2
else:
sco[-1] = sco[-1] * 2
elif dartResult[i] == '#':
sco[-1] = -sco[-1]
else:
if i < len(dartResult) - 1 and 48 <= ord(dartResult[i+1]) <= 57:
temp += int(dartResult[i]+dartResult[i+1])
else:
temp += int(dartResult[i])
return sum(sco)
bonus = ['S', 'D', 'T']
def solution2(dartResult):
answer = []
score = ''
for result in dartResult:
if result.isdigit():
score += result
elif result in bonus:
score = int(score) ** (bonus.index(result) + 1)
answer.append(score)
score = ''
elif result == '*':
answer[-1] = answer[-1] * 2
if len(answer) > 1:
answer[-2] = answer[-2] * 2
else:
answer[-1] = -answer[-1]
return sum(answer)
if __name__ == '__main__':
print(solution('1S2D*3T'))
print(solution('1D2S#10S'))
print(solution('1D2S0T'))
print(solution('1S*2T*3S'))
print(solution('1D#2S*3S'))
print(solution('1T2D3D#'))
print(solution('1D2S3T*'))