알고리즘 문제풀이/백준

[백준 2257] 화학식량

taemin 2021. 5. 7.

www.acmicpc.net/problem/2257

 

2257번: 화학식량

첫째 줄에 화학식이 주어진다. 화학식은 H, C, O, (, ), 2, 3, 4, 5, 6, 7, 8, 9만으로 이루어진 문자열이며, 그 길이는 100을 넘지 않는다.

www.acmicpc.net

s = input()

d = {
    "H" : 1,
    "C" : 12,
    "O" : 16
}

stack = []

for i in s:
    if i in d:
        stack.append(d[i])
    elif i == "(":
        stack.append(i)
    elif i == ")":
        temp = 0
        while True:
            p = stack.pop()

            if p == "(":
                break

            temp += p
        
        if temp == 0:
            continue
        else:
            stack.append(temp)
    else:
        n = stack.pop()
        temp = n*int(i)
        stack.append(temp)

print(sum(stack))

풀이

 

스택 자료구조에 차근차근 덧셈을 해나간다.

규칙은 아래와 같다.

 

  • 스택 구조에 하나씩 push한다.
  • 빈칸이라면 그냥 push
  • 문자라면 숫자로 변환하고 push
  • 숫자라면 스택에서 pop 한것과 숫자를 곱한후 다시 push
  • 여는 괄호라면 그냥 push
  • 닫는 괄호라면 가장 빨리 pop되는 여는괄호까지 모두 pop 한 후, pop한걸 다 더해주고 push

마지막으로 stack에 남아있는 모든 수의 총합을 구해주면 된다.

 

문제유형이 스택이라 생각됐을 경우 pop으로 꺼낸 후 특정 로직을 처리하고 다시 push하는 등의 테크닉을 잘 활용하면 좋다.

 

시간복잡도

문자의 길이가 N 이라면 O(N)만큼의 시간이 든다.

 

 

 

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준 17218] ⚾  (0) 2021.05.07
[백준 1013] Contact  (0) 2021.05.07
[백준 5347] LCM (최소공배수)  (0) 2021.05.07
[백준 10610] 30  (0) 2021.05.05
[백준1238] 파티  (0) 2021.05.05

댓글