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를 두고 검사할 필요가 없었다.
그냥 포문을 인덱스로 돌리고, 직전 요소와 검사하면 되는거였다.