본문 바로가기

프로그래밍/알고리즘

[방학의 PS] 균형잡힌 세상 - BOJ_4949

https://www.acmicpc.net/problem/4949

 

4949번: 균형잡힌 세상

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 각 줄은 마침표(".")로 끝난다

www.acmicpc.net

오늘의 문제는 자료구조 알고리즘 시간에도 한 번 다루었던 스택에 관한 문제입니다. 대표 유형인 괄호 문제이죠. 스택의 핵심은 모두 아시다시피 FILO(First In, Last Out)입니다. 그 부분을 집중해서 읽어보시면 여태까지 제가 올린 문제 중에서는 가장 수월하게 해결하실 수 있으실 것 같습니다.

 

정답 코드는 다음과 같습니다.

 

brackets = ['(', ')', '[', ']']

while 1:
    sentence = input()
    if sentence == ".":
        break
    brackets_stack = []
    for i in sentence:
        if i in brackets:
            brackets_stack.append(i)
            while len(brackets_stack) >= 2 and \
            ((brackets_stack[-2] == '(' and brackets_stack[-1] == ')') or \
             (brackets_stack[-2] == '[' and brackets_stack[-1] == ']')):
                brackets_stack = brackets_stack[:-2]
    if len(brackets_stack) == 0:
        print("yes")
    else:
        print("no")