isPowerfulBlog

[re-Solved] BOJ: 9012 | 괄호 본문

Algorithm

[re-Solved] BOJ: 9012 | 괄호

왕밤빵도라에몽 2024. 12. 10. 22:00

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