이 그림을 보고 스택이 떠올라야한다. '('가 들어오면 쇠막대기가 들어왔다는 것을 의미하고 ')'는 쇠막대기 빠졌다는 것을 의미한다. '()'가 들어오면 레이저가 들어왔다는 것이다.
그렇다면 쇠막대 조각을 언제 개수를 늘려줘야할까?
즉, 이 문제의 관건은 첫번째로 스택이라는 자료 구조를 사용할 생각이 문제를 읽자마자 드는가와 ')'를 만났을때 레이저로 처리할 것인지, 아니면 그냥 쇠막대기를 빼는 것인지 이 두 가지를 구별해서 처리할 수 있는가를 주로 물어보는 문제이다.
import sys
from collections import deque
input = sys.stdin.readline
s = input().strip()
ans = 0
q = deque()
for i in range(len(s)):
if s[i] == "(":
q.append(s[i])
if s[i] == ")":
if s[i - 1] == "(": # 레이저
q.pop()
ans += len(q)
else:
q.pop()
ans += 1
print(ans)