문제
https://www.acmicpc.net/problem/2257
Algorithm
stack을 이용하는 문제이고, 후위표기식 방식을 생각하면 쉽게 풀린다.
여는 괄호가 나오면 닫는 괄호가 나올때까지 해당 원소들의 질량을 모두 더해주고, 숫자가 나오면 해당 앞의 화학식량의 숫자배를 해주면 된다.
여는 괄호가 나오면 닫는 괄호가 나올때까지 stack에 질량을 넣어준다. 닫는 괄호가 나오면 여는 괄호가 나올때까지 stack에서 pop하여 다 더해준후 stack에 넣어준다.
숫자가 나오는 경우는 stack에서 pop하여 숫자배를 해준후에 다시 append 해주면 된다.
이 과정을 반복하여 최종적으로 stack에 있는 질량들을 더하면 해당 화학식의 화학식량이 나오게 된다.
Code
input = __import__('sys').stdin.readline
sent = input().strip()
stack = []
for i in sent:
if i == "(":
stack.append(i)
elif i == ")":
temp = 0
while True:
ans = stack.pop()
if ans == "(":
break
temp += ans
stack.append(temp)
elif i == 'H':
stack.append(1)
elif i == 'C':
stack.append(12)
elif i == 'O':
stack.append(16)
else:
stack.append(stack.pop() * int(i))
print(sum(stack))
'Koala - 13기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/c++] 28278번: 스택2 (0) | 2024.02.10 |
---|---|
[백준/python3] 2346번 : 풍선 터뜨리기 (0) | 2024.02.10 |
[백준/C++] 카드1 (0) | 2024.02.09 |
백준 #24041 (python) (0) | 2024.02.05 |
[백준/C++] 1654번 랜선자르기 (0) | 2024.02.04 |