Cometin'

BOJ-4949 - Python

2021-03-23 at Algorithm category

영문 알파벳, 공백, 소괄호, 대괄호, 온점으로 이루어진 문자열을 입력받는다. 해당 문자열이 소괄호, 대괄호에 대해서 균형을 이루고 있으면 "yes"를, 아닐 시 "no"를 출력하는 문제. 스택을 이용하여 풀었으며 괄호를 여는 문자일 시 스택에 추가, 닫는 문자일 시 스택의 마지막 값과 비교하여 pop하거나 break하여 풀었다. 소괄호 대괄호를 비교하는 데 딕셔너리 자료형을 이용하였으며 반복문이 종료시에도 스택에 괄호가 남아있는 경우도 예외처리하여 풀었다.

import sys
input = sys.stdin.readline

braket_fair = {")": "(", "]": "["}

while True:
    stack = []
    answer = True
    string = input().rstrip()

    if string == ".": break

    for word in string:
        if word == "(" or word == "[": stack.append(word)
        elif word == ")" or word == "]":
            if stack and stack[-1] == braket_fair[word]:
                stack.pop()
            else:
                answer = False
                break

    if len(stack) != 0: answer = False
    print("yes" if answer else "no")

hyesungoh

Personal blog by hyesungoh.

I like to share my knowledge for those who wandering in issue.