본문 바로가기
Problem Solving/백준

백준 9012 괄호 [파이썬, 자료 구조, 문자열, 스택]

by JC_ 2023. 3. 23.
 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

n = int(input())                        # 판단할 vps의 수
for i in range(n):                      # n 만큼 반복해줘
    vps = list(input())                 # vps를 list형태로 받아오고
    if vps[-1] == '(':                  # 가장 마지막 괄호가 ( 이면 처음부터 아니야
        print('NO')                     # NO 프린트 하고
        continue                        # 바로 다음 반복문으로
    l = []                              # 왼쪽괄호를 담을 리스트
    r = []                              # 오른쪽괄호를 담을 리스트
    for j in range(len(vps)):           # vps의 길이 만큼 반복할거야
        if vps[j] == "(":               # ( 는
            l.append(vps[j])            # 우선 담는다.
        elif vps[j] == ")":             # ) 가 나오면
            r.append(vps[j])            # 우선 담고
            if len(l) != 0:             # ( 이 담겨 있다면
                r.pop()                 # 함께 상쇄해줘
                l.pop()                 # 괄호가 성립한다는 거지
            else:                       # )가 나왔는데 함께 상쇄할 (가 없다면 vps가 아니야
                break                   # 이 vps는 판단 끝 다음 vps 받으러 나가줘
    if len(l) == 0 and len(r) == 0:     # 상쇄를 다 하고 두 리스트가 깔끔하게 비어있으면
        print("YES")                    # vps YES 이다
    else:                               # 상쇄를 다 했는데 리스트가 남아 있으면
        print("NO")                     # vps NO 아냐

댓글