isPowerfulBlog
[re-Solved] BOJ: 9012 | 괄호 본문
4년 전 코드
T = int(input())
for i in range(T):
string = input()
num1 = 0
num2 = 0
for j in string:
if num2 > num1:
break
else:
if j == "(":
num1 += 1
elif j == ")":
num2 += 1
if num1 == num2:
print("YES")
else:
print("NO")
- (good) 단순하게 해결
- (bad) 신뢰성 떨어지는 코드
개선 코드
from collections import deque
import sys
input = sys.stdin.readline
def is_valid_ps(ps_string):
stack = deque([])
for chr in ps_string:
if chr == '(':
stack.append(chr)
else:
if stack:
left = stack.pop()
if left != '(':
return 'NO'
else:
return 'NO'
if stack:
return 'NO'
return 'YES'
if __name__ == "__main__":
n = int(input())
for _ in range(n):
ps_string = input().strip()
sys.stdout.write(is_valid_ps(ps_string) + "\n")
- (good) stack 자료구조 사용으로 정확한 처리
배운점 / 다시 상기한 점
- 문자열 입력받을 때 양끝 공백 제거 해주기: strip()
- stack = deque([])일 때, if stack: 하면 __bool__함수에서 내부적으로 len(stack)을 점검한다.
- 따라서 if stack == if len(stack) > 0
'Algorithm' 카테고리의 다른 글
[Solved] BOJ: 1920 | 수 찾기 (0) | 2024.12.11 |
---|---|
[re-Solved] BOJ: 10828 | 스택 (0) | 2024.12.10 |
[re-Solved] BOJ: 10845 | 큐 (0) | 2024.12.10 |
[Solved] BOJ: 2457 | 공주님의 정원 (2) | 2023.12.22 |
[자료구조] 큐, 스택, 힙 (1) | 2023.11.16 |