백준 단계별문제/스택/ 파이썬 백준 9012 괄호

suhyeon chae·2022년 1월 6일
0


문제 : https://www.acmicpc.net/problem/9012

문제 풀이 방법

  • 앞에서부터 괄호 하나하나 체크해줌

  • 현 위치의 괄호가 "("라면 리스트에 추가해줌

  • 현 위치의 괄호가 ")"라면 따져봐야할 것이 있음
    - 빈 리스트가 아니고 , 리스트의 마지막 요소가 "("라면 리스트에서 "(" pop해서 제거
    • 빈 문자열이게되면 빈문자열에 ")"가 나왔다는 거니까 올바른 괄호가 아님. 따라서 빈문자열인 상태에서 ")" 를 append해줘서 빈문자열이 아니게 만듦

  • 리스트 길이를 체크해서 0이면 다 pop됐다는 뜻이니까 올바른 괄호로 YES출력
  • 리스트 길이를 체크해서 0보다 크다면 남아있는 괄호"(" 또는 추가해준 ")"일 것이므로 올바른 괄호 아님 . NO출력
import sys

T = int(sys.stdin.readline())

for t in range(T):
    ps = sys.stdin.readline()
    stk =[]

    for i in ps:
        if i == "(": # 문자열 하나씩 for문 돌려서 보는데 i 가 ( 라면 리스트 stk에 추가한다
            stk.append(i)
        elif i == ")": # i 가 ( 일 경우에 , 리스트가 빈 리스트가 아니고, 리스트의 마지막 원소값이 ( 일경우에 pop해줌 
            if len(stk) != 0 and stk[-1] == "(":
                stk.pop()
            else: # len(stk) == 0 and stk[-1] == ")" 일 경우에는 어차피 빈 리스트에 원소가 )라는 말은 올바른 괄호가 아니라는 말
                stk.append(i) # 추가를 해줘서 빈 리스트가 아니도록 만듦 (어차피 올바른 괄호가 아니라서)

    if len(stk) == 0 :
        print("YES")

    elif len(stk) > 0:
        print("NO")
profile
예비 클라우드 & 백엔드 개발자 !

0개의 댓글

관련 채용 정보