문제
https://school.programmers.co.kr/learn/courses/30/lessons/17682
내 풀이
"1S2D*3T"을 [1, 'S', 2, 'D', '*', 3, 'T']와 같이 바꾸는 작업을 하였다. 숫자가 0부터 10까지 있으므로, "10"을 위해 temp에 문자를 더해주는 방식으로 코드를 짰다. 만든 리스트의 이름을 lst로 명명하였다.
stack을 사용하여 연산을 하였다.
def solution(dartResult):
lst = []
temp = ""
for dart in dartResult:
if dart.isdigit():
temp += dart
else:
if temp != '': lst.append(int(temp))
lst.append(dart)
temp = ""
stack = []
for l in lst:
if str(l).isdigit():
stack.append(l)
elif l == 'D':
stack.append((stack.pop())**2)
elif l == 'T':
stack.append((stack.pop())**3)
elif l == '*':
if len(stack) == 1:
stack.append((stack.pop())*2)
else:
b, a = stack.pop(), stack.pop()
stack.extend([a*2, b*2])
elif l == '#':
stack.append((stack.pop())*(-1))
return sum(stack)
과거 내 풀이
오잉... 쏘 큐티...
def solution(dartResult):
answer = [0]*3
num, alpha, prize = [], [], []
for i in range(1, len(dartResult)):
if (dartResult[i-1] == 'S' or dartResult[i-1] == 'D' or dartResult[i-1] == 'T') and (ord('0') <= ord(dartResult[i]) <= ord('9')):
dartResult = dartResult[:i] + '@' + dartResult[i:]
if dartResult[-1] != '*' and dartResult[-1] != '#' and dartResult[-1] != '@':
dartResult += '@'
tmp = ''
for dart in dartResult:
if ord('0') <= ord(dart) <= ord('9'):
tmp += dart
elif dart == 'S' or dart == 'D' or dart == 'T':
num.append(int(tmp))
tmp = ''
alpha.append(dart)
else:
prize.append(dart)
for i in range(3):
if alpha[i] == 'S':
answer[i] = num[i]**1
elif alpha[i] == 'D':
answer[i] = num[i]**2
elif alpha[i] == 'T':
answer[i] = num[i]**3
if prize[i] == '*':
if i == 0:
answer[i] *= 2
else:
answer[i-1] *= 2
answer[i] *= 2
elif prize[i] == '#':
answer[i] *= (-1)
return sum(answer)
총평
옛날에 오랫동안 붙잡고 있었던 문제였던 게 기억이 나서 재도전할 때 살짝 두려웠다. 그러나, 생각보다 금방(약 20분 정도 걸린 것 같다) 풀어서 다행이었다.
'알고리즘 > 카카오 EASY' 카테고리의 다른 글
방금그곡 (Level 2) (0) | 2022.07.25 |
---|---|
압축 (Level 2) (0) | 2022.07.25 |
비밀지도 (Level 1) (0) | 2022.07.11 |
캐시 (Level 2) (0) | 2022.07.08 |
프렌즈4블록 (Level 2) (0) | 2022.07.08 |