[Python] 백준 4949 균형잡힌 세상

eun·2024년 1월 18일
post-thumbnail

문제 4949

위 문제를 먼저 이해해보자.

  • 문자열들이 주어지고 해당 문자열이 "(", ")" 가 짝지어 있고, "[", "]" 가 짝지어 있는지 출력하는 문제이다.
  • 스택을 활용하여 풀어보자.
# 4949

import sys

while True:
    stack = []
    con = 1
    line = sys.stdin.readline().rstrip()
    if line == '.':
        break
    for i in line:
        if i == '(' or i == '[':
            stack.append(i)
        elif i == ')':
            if len(stack) == 0:
                con = 0
                break
            top = stack.pop()
            if top == '[':
                con = 0
                break
        elif i == ']':
            if len(stack) == 0:
                con = 0
                break
            top = stack.pop()
            if top == '(':
                con = 0
                break
    
    if len(stack) == 0 and con == 1:
        print("yes")
    else:
        print("no")

위 문제는 스택을 활용하면 쉽게 해결할 수 있다.
다만 처음에는 "(", ")" 의 스택과 "[", "]" 스택을 따로 만들었는데 이렇게 하면 ( [ ) ] 와 같이 번갈아 나오는 경우도 "yes"라고 잘못 출력하기 때문에 스택을 하나로 바꿔 작성하였다.

0개의 댓글