728x90
반응형
문제
https://www.acmicpc.net/problem/9012
해설
반응형
처음엔 아무 생각 없이 '('의 개수와 ')'의 개수를 세서 같으면 YES, 다르면 NO를 출력했었는데
그러면 안된다.
')'이 '('보다 먼저 있으면 괄호가 제대로 닫기지 않기 때문이다.
짝을 맞춰보려면 '('이 나왔을 경우 스택에 넣어주고
')'이 나오면 스택에 들어있던 '('을 pop해준다.
대신 스택에 아무것도 없는데 ')'이 나오면 더이상 볼 것도 없이 NO를 출력해주면 된다.
문자열의 끝까지 반복문을 돌고 났을 때 스택에 아무것도 남아있지 않다면
모든 괄호가 정확히 닫겼다고 보면 된다.
이 문제는 sys.stdin.readline()으로 풀면 뒤에 개행문자가 들어가서 제대로 된 값이 나오지 않는다.
개행문자를 제거하고 풀든지, 아니면 input()으로 풀어야 한다.
코드
-파이썬
#백준 9012(괄호)
n = int(input())
for i in range(n):
stack = []
ps = input()
for i in ps:
if i == '(':
stack.append(i)
else:
if stack: #스택에 '('가 들어있음
stack.pop()
else: #스택에 아무것도 없음
print("NO")
break
else:
if not stack: #스택에 아무것도 없음
print("YES")
else:
print("NO")
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[파이썬] BOJ_11725(트리의 부모 찾기) dfs/bfs (0) | 2023.06.27 |
---|---|
[파이썬] BOJ_11659(구간 합 구하기 4) (0) | 2023.06.26 |
[파이썬] BOJ_10448(유레카 이론) (0) | 2023.06.24 |
[파이썬] BOJ_4963(섬의 개수) (0) | 2023.06.15 |
[파이썬] BOJ_3273(두 수의 합) (0) | 2023.06.12 |