본문 바로가기
Beakjoon&프로그래머스/파이썬

[백준/파이썬]4949번 균형잡힌 세상

by 현장 2021. 5. 10.

-코드

from sys import stdin

while 1:
    c = stdin.readline()
    s = []
    r = True
    if c[0] == ".":
        break
    for i in c:
        if i == '(' or i == '[':
            s.append(i)
        if i == ')':
            if len(s) == 0 or s[-1] == '[':
                r = False
                break
            elif s[-1] == '(':
                s.pop()

        elif i == ']':
            if len(s) == 0 or s[-1] == '(':
                r = False
                break
            elif s[-1] == '[':
                s.pop()

    if r and len(s) == 0:
        print("yes")
    else:
        print("no")

처음에는 9012번 푼 것처럼 했다가 틀리게 나와서 질문 게시판과 알고리즘 분류를 보니 스택을 사용하는 것이어서 코드를 다시 짜고 입력을 넣어보니 중간에 ], )가 먼저 나왔을 경우 s의 길이가 0이어서 인덱스 오류가 생겨서 추가 if문을 만들어 주었습니다. 그 후에 출력이 문제가 없어서 넣어봤으나 틀렸습니다. 그래서 반례를 찾아보니 어떤 분이 댓글을 달아주신 입력인 [(Wrong]Wrong) Wrong]일 경우 경우와. 이면 끝나야 하는 경우를 쳐봤더니 둘 다 적용이 안되고 있어서. 은 c == '.'이어서 안 되는 거여서 위 코드와 같이 바꾸어 주었고 [(Wrong] Wrong) Wrong] 같은 경우는 괄호의 종류가 맞지 않는 것이 들어가면 오류가 뜨기 때문에 다른 괄호가 들어갈 경우와 배열 s의 길이가 0인 경우 따로 참, 거짓을 판단하게 하여서 해결을 하였습니다.