계획
- 전체 모든 값을 넣을 스택과, 레이저를 제외하고 쇠막대기 개수를 넣을 변수를 만듦
- 입력을 받을 때, 입력 받을 값과 스택의 마지막 값을 비교
- 입력이 ( 이면 스택에 추가하고 쇠막대기 개수에 +1
- 입력이 ) 이면
- 레이저의 끝인 경우 ( 스택 마지막 값이 (임 ) 현재 쇠막대기 개수를 -1 한 후, 정답에 추가, 스택에 넣음
- 쇠막대기의 끝인 경우 ( 스택 마지막 값이 )임 ) 스택만 추가
import sys
inp = list(input())
stack = []
sub_stack = 0
ans = 0
for i in inp:
if i == "(":
sub_stack += 1
stack.append(i)
else:
if stack[-1] == "(": # 레이저인 경우
stack.append(i)
sub_stack -= 1 # 레이저 시작 부분 뺌
ans += sub_stack
else: # 나무 끝인 경우
stack.append(i)
sub_stack -= 1 # 나무 시작부분 뺌
ans += 1
print(ans)
- 쇠막대기에 관한 스택도 만들었는데, 개수만 필요해서 숫자로 표현해도 된다.
- 레이저 끝인 ) 와 쇠막대기 끝인 ) 구분 주의