문제링크
def solution(dartResult):
# 10이 예외적으로 두 자리 숫자라서 한자리 문자로 표기해야 반복 시 꺼내기 쉬움
dartResult = dartResult.replace('10', 'A')
# 점수를 차례로 입력하기 위한 배열
answer_list = []
# 각 문자별 제곱근 저장 딕셔너리
score_area = {'S':1, 'D':2, 'T':3}
# 현재 점수를 계산
cur_score = 0
# 다트결과에서 하나씩 꺼내어 점수 및 로직을 계산
for i, d in enumerate(dartResult):
# 꺼낸 값이 숫자거나 위에서 치환한 A일 때
if d.isdigit() or d == 'A':
# 숫자를 넣거나 A를 10으로 치환해서
cur_score = int(d) if d.isdigit() else 10
# 현재 점수를 먼저 배열에 저장
answer_list.append(cur_score)
# S, D, T 문자열일 경우는 점수 배열의 가장 최신 값에 해당 값만급 제곱
elif d in score_area:
answer_list[-1] **= score_area[d]
# #이나 *일 경우는 점수 배열의 가장 최신값과 그 앞 값에 로직 추가
elif d == '#':
answer_list[-1] *= -1
elif d == '*':
answer_list[-1] *= 2
if i > 2:
answer_list[-2] *= 2
# 담긴 점수 배열을 모두 합해서 return
return sum(answer_list)