https://www.acmicpc.net/problem/10799
stack에는 index를 넣을 것이다.
그리고 입력받은 t에 대해서 각 index별로 for문을 돌린다.
for문을 돌릴 때 '('라면 stack에 넣고 ')'인 경우 pop을 진행한다.
중요한 것은 pop한 이후인데 만약 직전의 인덱스 값과의 차이가 1인 경우, 즉, '()'와 같은 모양이 있는 경우 laser로 판단해야한다.
laser로 판단했다면 laser 기준 stack에 쌓인 개수를 cnt에 더한다.
그리고 단순 '()'인 경우가 아닌 경우 stick의 개수만큼을 추가로 더함으로써 총 개수를 마무리한다.
t = [i for i in input()]
stack = []
cnt = 0
for i in range(len(t)):
if t[i] == '(':
stack.append(i)
if t[i] == ')':
tmp = stack.pop()
if i - tmp == 1:
cnt += len(stack)
else:
cnt += 1
print(cnt)
방법 1과 동일하며 약간의 정돈과 변경이 있는 코드이다.
import sys
t = [i for i in sys.stdin.readline().rstrip()]
stack = []
cnt = 0
for i in range(len(t)):
if t[i] == '(':
stack.append(i)
else:
tmp = stack.pop()
if t[i-1] == '(':
cnt += len(stack)
else:
cnt += 1
print(cnt)