문제
dartResult를 순회하며
- 알파벳 나옴 : 이전에 저장 중이던 숫자를 int화 해서 인덱스에 넣어준다. S, D, T에 따라 값+이전값에 제곱을 해주되, 현재 입력중인 인덱스가 0이면 현재 인덱스에만 해준다.
- *이나 # 나옴 : *이면 현재 값+이전 값에 제곱 해주는데, 입력 중인 인덱스가 0이면 현재 인덱스에만 해준다. #이면 현재 인덱스에 마이너스를 넣어준다.
- 숫자 나옴 : 어디까지 숫자일지 알 수 없으므로(반드시 1자리가 아니라, 10일 수도 있음) str형태로 저장한다.
result 용으로 [0,0,0] 배열을 갖고 돕니다.
각 예제에 대한 값의 변화는 아래와 같습니다.
1S*2T*3S = [0,0,0] -> [1,0,0] -> [1*2, 0, 0] -> [1*2, 2**3, 0] -> [1*2*2, 2**3*2, 0] -> [1*2*2, 2**3*2, 3] = 4 + 16 + 3 = 23
1D#2S*3S = [0,0,0] -> [1, 0, 0] -> [-1, 0, 0] -> [-1, 2, 0] -> [-2, 4, 0] -> [-2,4,3] = 5
1T2D3D# = [0,0,0] -> [1,0,0] -> [1,4,0] -> [1,4,9] -> [1,4,-9] = -4
1D2S3T* = [1,0,0] -> [1,2,0] -> [1,2,27] -> [1,4,54] = 59
코드
def solution(dartResult):
answer = 0
res = [0,0,0]
alpha = ['S', 'D', 'T']
op = ['*', '#']
idx = 0
tempNum = ""
for d in dartResult :
if d in alpha :
res[idx] = int(tempNum)
tempNum = ""
if d == 'D' :
res[idx] = res[idx]**2
elif d == 'T' :
res[idx] = res[idx]**3
idx += 1
elif d in op :
idx -= 1
if d == '*' :
if idx >= 1 :
res[idx-1] *= 2
res[idx] *= 2
else :
res[idx] *= 2
elif d == '#' :
res[idx] *= (-1)
idx += 1
else :
tempNum += d
return res[0]+res[1]+res[2]