728x90
반응형
문제출처: https://school.programmers.co.kr/learn/courses/30/lessons/17682
풀이:
def solution(dartResult):
point = ['10' if i =='A' else i for i in dartResult.replace('10', 'A')] # 다시 A 이면 10으로 해서 저장
dic = {"S" : 1,
"D" : 2,
"T" : 3}
# dic 저장
stack = []
# stack 만듦
for i in point:
if i.isnumeric() or i =="A":
stack.append(10 if i =="A" else int(i))
elif i in["S", "D", "T"]:
now = stack.pop()
stack.append(now ** dic[i] ) # s, d, t 에 따라 제곱해줌
elif i =="#":
stack[-1] *= -1 # #이면 -1을 곱하고
elif i == "*": # * 이면
now = stack.pop() # 뽑아본다
if len(stack): # 두번째 별 나왔을때 첫번째 숫자도 2 곱해줘야함
stack[-1] *= 2
stack.append(2 * now) # 지금 뽑은 숫자도 2 곱해줘야하고
return sum(stack) # 합쳐서 리턴
print(solution("1S*2T*3S"))
이건 어려움
다른 분 풀이:
import re
def solution(dartResult):
bonus = {'S' : 1, 'D' : 2, 'T' : 3}
option = {'' : 1, '*' : 2, '#' : -1}
p = re.compile('(\d+)([SDT])([*#]?)')
print(p)
dart = p.findall(dartResult)
print(dart)
for i in range(len(dart)):
if dart[i][2] == '*' and i > 0:
dart[i-1] *= 2
dart[i] = int(dart[i][0]) ** bonus[dart[i][1]] * option[dart[i][2]]
answer = sum(dart)
return answer
굉장한 식이다
반응형
댓글