[BOJ / Python] 9012 괄호

도니·2023년 4월 21일
0

BOJ / Python

목록 보기
103/104
post-thumbnail

문제

백준 9012 괄호

코드

import sys

T = int(input())
for _ in range(T):
    stack = []
    input = list(sys.stdin.readline().rstrip())
    isVPS = True

    for ch in input:
        if ch == '(':
            stack.append(ch)
        else:
            # ch == ')'
            if len(stack) == 0:
                isVPS = False
                break
            else:
                stack.pop()
    if not stack and isVPS:
        print('YES')
    elif stack or not isVPS:
        print('NO')

코드 설명

VPS가 되려면 (의 개수와 )의 개수가 같아야 한다.
따라서 stack을 이용하여 두 괄호의 개수가 같은지 확인한다!

입력 문자열 한 줄을 받을 때마다 스택을 초기화해야하므로 stack = []을 for문 안에 위치시킨다. 또한 입력된 괄호 문자열이 VPS인지 확인하기 위해 사용할 boolean형 변수 isVPS를 선언하고 True값으로 초기화시킨다. 이 변수 역시 입력 문자열 한 줄을 맏을 때마다 초기화되어야 하므로 for문 안에 위치시킨다.

괄호 문자열에서 읽은 문자가 (이면 append() 함수를 사용하여 stack에 값을 넣는다.
문자가 )이면 두 가지 경우의 수가 생긴다.

  1. 이미 문자열의 크기가 0인 경우
    (의 개수보다 )의 개수가 많음을 의미하므로 isVPS의 값을 False로 바꾸어준다. 그리고 break를 사용하여 해당 for문을 빠져나간다.

  2. 그렇지 않은 경우
    pop() 함수를 사용하여 stack에서 값을 빼낸다.

괄호 문자열의 모든 문자를 검사하는 for문(안쪽 for문)을 완료하고 나면 해당 문자열이 VPS인지 아닌지 판별한다.

  1. stack이 비어있고 isVPS == True 인 경우
    (의 개수보다 )의 개수가 같음을 의미하므로 YES를 출력한다.
  2. stack이 비어있지 않거나 isVPS == False 인 경우
    (의 개수와 )의 개수가 같지 않음을 의미하므로 NO를 출력한다.
profile
안녕하세요, 🌱새싹개발자 도니💡입니다!

0개의 댓글

관련 채용 정보