https://school.programmers.co.kr/learn/courses/30/lessons/17682
import re
def solution(dartResult):
answer = 0
dart = re.split('([*,#,S,D,T])',dartResult)
stack = []
num = 0
for i in dart:
if i.isdigit():
num = int(i)
elif i in ['*','#']:
if i == '*':
stack[-1] = stack[-1] * 2
if len(stack) >= 2:
stack[-2] = stack[-2] * 2
elif i == '#':
stack[-1] = stack[-1] * -1
elif i in ['S','D','T']:
if i =='S':
num = num ** 1
elif i == 'D':
num = num ** 2
elif i == 'T':
num = num ** 3
stack.append(num)
print(stack)
answer = sum(stack)
return answer
해당 문제를 코드 그대로 구현하면 정답이 된다.
다만 점수가 1~10점인 제한이 있어
그냥 for i in dartResult를 하게된다면, 10s인 경우 1,0,s가 되므로 정규화를 이용하
'10','s'로 나누어야 된다.
정규화는 아래 문제 풀이를 통해 이미 학습한 바 있다.
https://junheelab.tistory.com/38
하지만 문제를 통과한 이후, 좀 더 간단하고 짧에 코드를 적을 수 있을 것 같은데...하는 생각에 검색을 해보았다.
def solution(dartResult):
stack = []
dartResult = dartResult.replace("10", "A")
bonus = {'S': 1, 'D': 2, 'T': 3}
for i in dartResult:
if i.isdigit() or i=='A':
stack.append(10 if i == 'A' else int(i))
elif i in ('S', 'D', 'T'):
num = stack.pop()
stack.append(num ** bonus[i])
elif i == '#':
stack[-1] *= -1
elif i == '*':
num = stack.pop()
if len(stack):
stack[-1] *= 2
stack.append(2 * num)
return sum(stack)
아래 코드가 그나마 제일 짧은 코드였고 나머지는 내가 푼 코드와 다를게 없었다.
'알고리즘' 카테고리의 다른 글
프로그래머스)두 정수 사이의 합-python (0) | 2023.02.08 |
---|---|
React)경고- react_devtools_backend.js:4012 Warning: You provided a `checked` prop to a form field without an `onChange` handler. (0) | 2023.02.07 |
백준4963)섬의 개수-python (0) | 2023.02.07 |
백준10815)숫자카드-pyhton (0) | 2023.02.06 |
백준1654)랜선 자르기-python (0) | 2023.02.06 |