문제 내용을 그대로 코드로 옮겼다.
입력 받은 문자열, dartResult
를 한 글자씩 잘라서 처리했다.
두 자리인 10
처리를 위한 while
문을 사용했다.
현재 점수에 제곱을 계산하는 S
, D
, T
마지막과 직전 점수를 2배로 만드는 *
, 마지막 점수에 -1배를 하는 #
그리고 점수(정수)를 각각 처리했다.
중간 결과들을 arr
리스트에 저장했고, 최종적으로 리스트에 저장된 모든 값들의 합을 반환했다.
일반적으로 dartResult[idx+1]
와 같은 코드는 위험하다고 생각한다.
다만, 해당 문제에서는 점수(정수) 다음에 'S', 'D', 'T' 와 같은 문자가 항상 오기 때문에 IndexOutOfException
위험이 없다고 판단했다.
def solution(dartResult):
arr = []
num = 1
idx = 0
while idx < len(dartResult):
c = dartResult[idx]
if c == 'S':
num = num ** 1
arr.append(num)
elif c == 'D':
num = num ** 2
arr.append(num)
elif c == 'T':
num = num ** 3
arr.append(num)
elif c == '*':
arr[-1] = arr[-1] * 2
if len(arr) > 1:
arr[-2] = arr[-2] * 2
elif c == '#':
arr[-1] = arr[-1] * (-1)
else:
if c == '1':
if dartResult[idx+1] == '0':
num = 10
idx += 1
else:
num = 1
else:
num = int(c)
idx += 1
return sum(arr)
for i, s in enumerate(arr):
arr[i] = ...
unindent does not match any outer indentation level
는 들여쓰기 오류
다.while
문 사용을 생각해보자.