사용 언어: python 3.9.5
https://programmers.co.kr/learn/courses/30/lessons/17682
level 1
S, D, T를 먼저 처리한 리스트 answer를 만든다.
예시) dartResult = "1D#2S*3S" 라면 answer = [1, '#', 2, '*', 3]
스타상, 아차상을 처리한다.
answer를 거꾸로 읽으면서 '*' 혹은 '#'을 처리한다.
'*'와 '#'을 제외한 수들을 합하고 반환한다.
def solution(dartResult):
# S, D, T 처리하기
# i: 현재위치, j: 점수가 시작되는 인덱스
i = 0
j = 0
answer = []
while(i<len(dartResult)):
if dartResult[i] == '*':
answer.append('*')
j = i+1
elif dartResult[i] == '#':
answer.append('#')
j = i+1
else:
if dartResult[i] == 'S':
answer.append(int(dartResult[j:i]))
j = i+1
elif dartResult[i] == 'D':
answer.append(int(dartResult[j:i])**2)
j = i+1
elif dartResult[i] == 'T':
answer.append(int(dartResult[j:i])**3)
j = i+1
i += 1
# 스타상, 아차상 처리
# answer를 거꾸로 읽어가며 *와 #을 찾아 계산한다
# i: 현재위치, j: 다음으로 이동할 위치(스타상 로직에서 필요한 변수)
i = len(answer) - 1
j = len(answer) - 1
while(i >= 0):
# 스타상일 때
if answer[i] == '*':
cnt = 0 # 처리된 숫자 수
j = i - 3 # 2개의 숫자 처리 후 이동할 위치
i -= 1
while (i >= 0 and cnt < 2):
# 만약 기호 '*' 또는 '#'이 발견되면, 2개 숫자 처리후 기호 위치로 이동한다
if answer[i] == '*' or answer[i] == '#':
j = i
else :
# 앞에 2개 숫자에 2를 곱한다
answer[i] = answer[i]*2
cnt += 1
i -= 1
i = j
# 아차상일 때
elif answer[i] == '#':
# 직전 숫자에 -1을 곱한다
answer[i-1]= -answer[i-1]
i -= 2
else :
i -= 1
# '*'와 '#'을 제외한 수들을 합한다
answer = [item for item in answer if item != '*' and item != '#']
return sum(answer)
성공
1시간 이상
answer = [item for item in answer if item != '*' and item != '#']
링크
접근법
코드