https://school.programmers.co.kr/learn/courses/30/lessons/17682
카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트판에 다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임으로, 모두가 간단히 즐길 수 있다.
갓 입사한 무지는 코딩 실력을 인정받아 게임의 핵심 부분인 점수 계산 로직을 맡게 되었다. 다트 게임의 점수 계산 로직은 아래와 같다.
입력 형식
"점수|보너스|[옵션]"으로 이루어진 문자열 3세트.
예) 1S2D*3T
출력 형식
3번의 기회에서 얻은 점수 합계에 해당하는 정수값을 출력한다.
예) 37
입출력 예제를 보는데 하나도 이해가 안돼서 구글링해버림 ^^;;;
알고보니 내가 문제를 제대로 안봤음
스타상(
*
) 당첨 시 해당 점수와 바로 전에 얻은 점수를 각 2배로 만든다.
이걸 몰랐다
구글링한 걸 봐버려서..어찌저찌 품
def solution(dartResult):
res = []
cnt = 0 #한판 점수
for n in dartResult:
if n.isnumeric():
cnt += int(n)
continue
elif n == 'S':
res.append(cnt)
elif n == 'D':
res.append(cnt ** 2)
elif n == 'T':
res.append(cnt ** 3)
elif n == '*': #스타상이고 두 판 이상했을 때
if len(res)>1:
res[-1] *= 2 #해당점수 2배
res[-2] *= 2 #바로 전 점수 2배
else : # 한판만 했으면
res[-1] *= 2
elif n == '#':
res[-1] *= -1
cnt=0 #한판점수 초기화
return(sum(res))
문제의 질문들을 봤는데 10점에 대한 예외처리를 안했더군
dartResult=dartResult.replace("10", "t")
elif n == 't': #10점 cnt += 10 continue
이 부분들을 추가했다
def solution(dartResult):
res = []
cnt = 0 #한판 점수
dartResult=dartResult.replace("10", "t")
for n in dartResult:
if n.isnumeric():
cnt += int(n)
continue
elif n == 't': #10점
cnt += 10
continue
elif n == 'S':
res.append(cnt)
elif n == 'D':
res.append(cnt ** 2)
elif n == 'T':
res.append(cnt ** 3)
elif n == '*': #스타상이고 두 판 이상했을 때
if len(res)>1:
res[-1] *= 2 #해당점수 2배
res[-2] *= 2 #바로 전 점수 2배
else : # 한판만 했으면
res[-1] *= 2
elif n == '#':
res[-1] *= -1
cnt=0 #한판점수 초기화
return(sum(res))
문제를 좀 똑바로 읽도록 하자.