이 글은,
1. 미래의 내가 다시 이 문제를 풀고자 할 때 과거의 내가 어떻게 문제를 해결했었는지 알려주기 위해서
2. 같은 문제를 풀고 있는 사람에게 아이디어를 제공하기 위해서
작성되었습니다.
Week02 TEST 두 번째 문제
백준 10799 쇠막대기 : https://www.acmicpc.net/problem/10799
💡 아이디어
- 괄호 문제는 대부분 스택으로 해결하는 것 같다.
- 다른 괄호 문제들과 같이 '('를 스택에 넣어준다.
- ')'가 나오면 두 가지 경우로 나뉜다.
- 입력값의 바로 앞에 '('가 있으면 레이저이고
- '('가 없으면 막대기의 끝부분이다.
- 레이저인 경우 지금까지 스택에 쌓여있는 '('의 개수(=살아있는 막대기의 수)를 더해주고
- 레이저가 아닌 경우는 막대기의 끝부분(=1)을 더해주면
- 스택이 비었을 때 전체의 막대기 값이 출력된다.
brackets = input()
stack = []
count = 0
for i in range(len(brackets)):
if brackets[i] == "(":
stack.append('(')
else:
# 이전 괄호가 닫는 괄호이면 레이저
if brackets[i-1] == '(':
count += len(stack)-1
stack.pop()
# 아니면 막대기
else:
count += 1
stack.pop()
print(count)