9012번 : 괄호

김민관·2021년 10월 8일

백준_Silver

목록 보기
17/57

문제보기

파이썬

import sys


def isVPS(s):
    stack = []
    for i in s:
        if i == '(':
            stack.append(i)
        if i == ')':
            if not stack or stack[-1] == ')':
                return False
            else:
                stack.pop()
    if not stack:
        return True
    else:
        return False


T = int(sys.stdin.readline())  # 테스트 케이스 수

for i in range(T):
    s = list(sys.stdin.readline().strip())
    if isVPS(s):
        print("YES")
    else:
        print("NO")

코드 설명

  • 괄호의 모양이 바르게 구성된 문자열인지 확인하는 isVPS 함수 구현
  • '('를 만났을때는 스택안에 집어넣고, ')'를 만났을때 앞의 값이 '('이면 pop, 그 외면 멈추고 False 반환
  • for문이 다 끝났을때 stack이 비워져있다면 True, 안에 값이 남아있으면 False

포인트

지난번에 비슷한 유형의 문제를 풀 때는 stack을 이용해서 어떻게 푸는지 감이 잘 안잡혀서 시간이 오래걸렸는데, 이번에는 빠르게 성공. 괄호안에 값이 남아있을 경우(s가 "((" 같을 경우)도 생각해야한다!

profile
게임 개발일지 & IT 소식들 공유

0개의 댓글