https://www.acmicpc.net/problem/10799
# 10799 쇠막대기
import sys
input = sys.stdin.readline
bars = input().strip()
stack = []
answer = 0
for i in range(len(bars)):
if bars[i] == '(':
stack.append('(')
else:
stack.pop()
if bars[i-1] == '(': # ) 직전 괄호가 (면 레이저
answer += len(stack)
else: # ) 직전 괄호가 )면 막대기의 끝
answer += 1
print(answer)
- 스택 자료구조의 특징을 이용했다.
- 열린괄호를 만나면 stack에 push 하고 닫힌괄호를 만나면 stack에서 pop 한다.
- 이때 입력받은 문자열 중 닫힌괄호의 직전괄호가 ( 면 레이저 이므로 stack에 남아있는 개수를 더해준다.
- 직전괄호가 ) 면 막대기의 끝이므로 1을 더해준다.
- 처음 괄호를 입력받을 때 sys.stdin.readline으로 하면 뒤에 공백이 들어와 인덱스에러가 난다.
- strip()함수로 공백을 제거해주거나 그냥 input함수를 사용해야 한다.
'Algorithm > Problems' 카테고리의 다른 글
99클럽 코테 스터디 9일차 TIL + 그리디 (0) | 2025.04.10 |
---|---|
99클럽 코테 스터디 8일차 TIL + 문자열 (0) | 2025.04.09 |
99클럽 코테 스터디 6일차 TIL + DFS (0) | 2025.04.07 |
99클럽 코테 스터디 5일차 TIL + 누적합 (0) | 2025.04.05 |
99클럽 코테 스터디 4일차 TIL + DFS (0) | 2025.04.03 |