728x90
반응형
문제: https://www.acmicpc.net/problem/9012
사용 알고리즘: 스택
입력
- 테스트케이스 개수 T
- 밑으로는 T 개의 테스트케이스가 주어지며, 테스트케이스의 괄호 문자열의 길이는 2 이상 50 이하
괄호의 짝을 맞추는 문제 -> 스택 대표 문제라고 생각하면 됨
주어진 괄호 문자열을 돌면서
1. '(' 인 경우 스택에 추가
2. ')' 인 경우
- 빈 스택일 경우 짝이 안 맞으므로 answer 에 'NO' 를 기록
- 빈 스택이 아닐 경우 스택의 맨 위의 요소 pop
주어진 괄호 문자열을 다 돌고 나왔는데, 빈 스택이 아닌 경우는 짝이 안 맞는 경우이므로 answer 에 'NO' 를 기록
for _ in range(n):
s = deque()
PS = input().rstrip()
answer = 'YES' # 일단 answer을 YES 로 기록해둠
for x in PS:
if x == '(': # ( -> 스택에 추가
s.append(x)
elif x == ')':
if len(s) == 0: # 빈 스택이면 짝 안 맞음 -> answer = 'NO'
answer = 'NO'
break
else: # 빈 스택 아니면 스택 맨 위 요소 pop
s.pop()
if len(s) != 0: # 다 돌았는데 빈 스택이 아님 -> 짝 안 맞음 -> answer = 'NO'
answer = 'NO'
print(answer)
전체 코드
import sys
from collections import deque
input = sys.stdin.readline
n = int(input())
for _ in range(n):
s = deque()
PS = input().rstrip()
answer = 'YES' # 일단 answer을 YES 로 기록해둠
for x in PS:
if x == '(': # ( -> 스택에 추가
s.append(x)
elif x == ')':
if len(s) == 0: # 빈 스택이면 짝 안 맞음 -> answer = 'NO'
answer = 'NO'
break
else: # 빈 스택 아니면 스택 맨 위 요소 pop
s.pop()
if len(s) != 0: # 다 돌았는데 빈 스택이 아님 -> 짝 안 맞음 -> answer = 'NO'
answer = 'NO'
print(answer)
시간 복잡도
- for 문 내부 연산들
- append: O(1)
- pop: O(1)
- 괄호 문자열을 도는 for문: O(m)
(m: 괄호 문자열의 길이)
- 테스트케이스 개수만큼 도는 바깥 for문: O(n)
총 시간 복잡도는 O(m*n)
728x90
반응형
'백준' 카테고리의 다른 글
[백준/Python] 24511 queuestack (0) | 2024.08.02 |
---|---|
[백준/Python] 2346 풍선 터뜨리기 (0) | 2024.08.01 |
[백준/Python] 18258 큐2 (0) | 2024.07.30 |
[백준/Python] 12789 도키도키 간식드리미 (0) | 2024.07.28 |
[백준/Python] 1874 스택 수열 (0) | 2024.07.26 |