import re
def solution(dartResult):
pattern = re.compile(r'([0-9]|10)([SDT])([\*\#]?)')
answer = []
calMap = {
'S': lambda x: x,
'D': lambda x: x**2,
'T': lambda x: x**3
}
for num, bon, op in pattern.findall(dartResult):
val = calMap[bon](int(num)) # 딕셔너리에 함수를 넣어 (int(num))으로 입력 받는다
if op == '*':
val *= 2
if answer: # 이미 계산된 숫자가 있으면
answer[-1] *= 2 # 얻은 점수도 *2를 해준다
elif op == '#':
val *= -1
answer.append(val)
return sum(answer)
arr = '1D2S3T*'
solution(arr)