https://www.acmicpc.net/problem/10799
import sys
str = sys.stdin.readline().rstrip()
stack = []
ans = 0
for i in range(len(str)):
if str[i] == "(":
stack.append("(")
elif str[i] == ")":
if str[i - 1] == "(":
stack.pop()
ans += len(stack)
else:
stack.pop()
ans += 1
# print("i = ", i)
# print("ans = ", ans)
print(ans)
처음에 괄호의 짝을 확인해야 한다고 생각했고, 문제를 어렵게 받아들였다.
근데 입력 자체가 괄호의 짝이 맞게 주어지기 때문에 이 부분은 고려할 필요가 없다.
그렇다면 레이저가 나타났을 때, 그 레이저로 인해 생기는 쇠막대기는 몇 개인지 어떻게 알 수 있을까?
'((('처럼 여는 괄호가 연속으로 나오면, 이는 쇠막대기가 3개 있음을 의미한다.
그리고 '(' 바로 다음에 ')'가 나오면 이는 레이저가 된다.
그래서 '((()'는 쇠막대기 2개가 존재하는 상황에서 레이저가 하나 나온 상황이다.
따라서 '()'에 의해 앞의 '(('에서 2개의 쇠막대기가 생성된다.
생각보다 Stack이라는 자료 구조를 의식하면서 문제를 풀 필요가 있는 것 같다.