문제 링크
https://www.acmicpc.net/problem/10799
구현
스택을 이용하는 문제이다. 중첩 되어있는 막대기를 어떻게 계산을 할 지 고민했는데, 그림을 잘 살펴보니 알 거 같았다.
만약 레이저(‘()’)가 나오면, 여태껏 중첩되어있는 막대기의 개수만큼 총 개수가 늘어난다. 만약 막대기의 끝 (‘)’) 이 나오면, 해당 막대기가 끝나는 것이므로 총 개수가 하나 늘어나며 중첩되어있는 막대기의 수가 하나 줄어든다.
따라서 먼저 ‘()’를 찾아 다른 문자 (‘|’) 로 바꿔주었고, 총 분기를 (, ), | 3개로 나눠 구현했다.
코드
from sys import stdin
input = lambda : stdin.readline().strip()
bar = input().replace('()', '|')
count = 0
stack = []
for i in bar:
if i == '|':
count += len(stack)
elif i == '(':
stack.append(i)
else:
count += 1
stack.pop()
print(count)