728x90
https://www.acmicpc.net/problem/2257
처음엔 숫자를 저장할 변수를 여러개 지정해서 값을 일일히 기억해줘야 한다고 생각했는데 아니었다. 일련의 계산을 끝낸 숫자들을 다시 stack에 집어넣는 방식으로 해야지 닫는 괄호 ) 가 나온뒤 숫자가 나와도 또는 알파벳이 나와도 모두 일괄적으로 계산할 수 있다.
import sys
string = list(sys.stdin.readline().rstrip())
alpha = { 'H' : 1, 'C' : 12, 'O' : 16 } #1
stack = []
for i in range(len(string)):
if string[i] == '(': #2
stack.append(string[i])
elif string[i] in alpha: #3
stack.append(alpha[string[i]])
elif string[i] == ')': #4
tmp = 0
while stack and stack[-1] != '(': #5
p = stack.pop()
tmp += p
stack.pop() #6
stack.append(tmp) #7
else: #8
stack.append(stack.pop() * int(string[i]))
print(sum(stack))
#1 : 알파벳에 맞는 숫자 해시로 구현
#2 : 여는 괄호일때는 stack에 삽입
#3 : 알파벳일때 그에 맞는 숫자 stack에 삽입
#4 : 닫는 괄호일때
#5 : 여는 괄호나올때까지 원소를 뺴주고 tmp에 더해줌
#6 : 그리고 여는 괄호 빼주고
#7 : tmp를 다시 stack에 삽입
#8 : 숫자라면 stack의 top에 있는 원소 숫자만큼 곱해줌
왜 풀지 못하는걸까.. 슬프다.
728x90
'[Coding Test] > [백준]' 카테고리의 다른 글
[백준] 1417 파이썬(python) : 국회의원 선거 (0) | 2022.07.25 |
---|---|
[백준] 15815 파이썬(python) : 천재 수학자 성필 - 후위표기식 (0) | 2022.07.25 |
[백준] 17952 파이썬(python) : 과제는 끝나지 않아! (0) | 2022.07.24 |
[백준] 11899 파이썬(python) : 괄호 끼워넣기 - 필요한 괄호 개수 세기 (0) | 2022.07.24 |
[백준] 2800 파이썬(python) : 괄호 제거 (0) | 2022.07.24 |