line = input()
stack = []
res = 0
prev = ""
for el in line:
if el == ")":
if prev == "(": # 레이저인 경우
stack.pop()
res += len(stack)
elif prev == ")": # 막대기의 끝점인 경우
res += 1
stack.remove("(")
else:
stack.append(el)
prev = el
print(res)
괄호가 담기는 스택 하나를 두고, 경우의 수를 나눴다.
닫는 괄호인 경우여는 괄호였던 경우여는 괄호들(끝나지않은 막대기들)의 수를 더해준다. 그리고 레이저 시작점(여는 괄호)를 지운다.닫는 괄호였던 경우여는 괄호인 경우공통으로 직전에 검사하는 prev를 두고 검사한다.
bar_razor = list(input())
answer = 0
stack = []
for i in range(len(bar_razor)):
if bar_razor[i] == '(': #스택 쌓기
stack.append('(')
else:
if bar_razor[i-1] == '(': #()라면 (를 pop하고 현재 스택에 들어있는 ( 수만큼 값을 더해준다.
stack.pop()
answer += len(stack)
else:
stack.pop()
answer += 1 #끄트머리 막대기 부분을 더해준다
print(answer)
애초에 prev를 두고 검사할 필요가 없었다.
그냥 포문을 인덱스로 돌리고, 직전 요소와 검사하면 되는거였다.