문제를 읽은 후 생각
- 앞에서부터 하나씩 잘라 처리
- 숫자가 나오면 배열에 저장
- S, D, T, * ,#은 각 조건에 따라 처리
- 배열에 저장된 숫자의 합 == 정답
코드
def solution(dartResult):
dartResult = list(dartResult)
answer = 0
arr = []
while dartResult:
tmp = dartResult.pop(0)
try:
num = int(tmp)
if num == 1 and dartResult[0] == '0':
dartResult.pop(0)
arr.append(10)
else:
arr.append(num)
except:
if tmp == 'S':
arr[-1] = arr[-1] * 1
elif tmp == 'D':
arr[-1] = arr[-1] ** 2
elif tmp == 'T':
arr[-1] = arr[-1] ** 3
elif tmp == '*':
if len(arr) == 1:
arr[-1] = arr[-1] * 2
else:
arr[-1] = arr[-1] * 2
arr[-2] = arr[-2] * 2
elif tmp == '#':
arr[-1] = -arr[-1]
answer = sum(arr)
return answer
회고
- 숫자 10을 처리하지 않아서 한 번 틀렸었다. 앞에서부터 하나씩 잘라 처리하였기 때문에 발생한 문제였다. 따라서 만일 숫자 1이 나온다면 다음 문자를 탐색하여 0인 경우 10으로 처리해주었다.
- 다른 사람들의 풀이를 보니 정규식으로 푸신 분들이 있던데 편리해보였다. 현재로는 이렇게 처리하는 것이 내 수준에는 맞는 풀이지만 나중에 한 번 정규식을 공부 할 필요를 느꼈다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
더 맵게 level2 (0) | 2021.07.24 |
---|---|
오픈채팅방 level2 (0) | 2021.07.23 |
기능개발 - level2 (0) | 2021.07.21 |
짝지어 제거하기 (0) | 2021.07.20 |
숫자 문자열과 영단어 (파이썬) (0) | 2021.07.13 |
댓글