문제 참고
코드 작성
def solution(dartResult):
answer = 0
num = 0
count = -1
num_list = [0 for _ in range(3)]
for r in dartResult:
try:
if float(r).is_integer():
if num == 1 and int(r) == 0:
num = int(10)
else:
num = int(r)
count += 1
except:
if r == 'S':
num = num ** 1
num_list[count] = num
elif r == 'D':
num = num ** 2
num_list[count] = num
elif r == 'T':
num = num ** 3
num_list[count] = num
elif r == '*':
if count >= 1:
num_list[count - 1] = num_list[count - 1] * 2
num_list[count] = num * 2
else:
num_list[count] = num * 2
else:
num_list[count] = num * (-1)
answer = sum(num_list)
return answer
- 다트는 총 3번만 던지므로 3개의 숫자를 담는 num_list 배열 생성
- dartResult에 저장된 내용을 하나씩 확인한다.
- 만약 정수라면 num_list에 저장한다. 이때 10은 하나씩 읽는 것으로는 알 수 없으므로, 먼저 num에 1이 저장되어 잇는데
이후 읽은 숫자가 0이라면 10을 num에 저장한다.
count는 숫자가 몇 개 읽혔는지를 저장하는 변수이다. 이후 '*'에 의한 직전 숫자의 2배 적용 여부를 판단하기 위함이다.
- 만약 except가 발생한 경우라면 정수가 아니기 때문이다.
S, D, T에 따라서 num에 곱하는 수를 달리하고 이를 이전에 만든 배열 num_list에 새로이 저장한다.
- 만약 '*'이 읽어지는 경우에는 지금 다루고 있는 숫자와 바로 직전의 숫자에 대해서도 동일하게 처리를 진행한다.
count가 1이상인 경우만 숫자가 2개 이상 있는 것이다.
- 아무 case에도 해당하지 않는 경우에는 '#'이므로 -1을 곱한다.
- 마지막으로 num_list에 있는 숫자들을 모두 더하기만 하면 된다.