공부하기/백준

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

XEV 2022. 9. 21. 21:02

파이썬 백준 4949번

실버4

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

 

4949번: 균형잡힌 세상

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

www.acmicpc.net

 

 

 

문제 보기

 

 

 

 

문제 풀기

빈 bracket_stack = [] 에 열린 괄호가 나올때마다 append() 로 추가 시킴.

닫힌 괄호가 등장하면 bracket_stack 이 비어있는지 또는 bracket_stack 의 마지막 원소가 다른 형태의 열린 괄호인지 확인하여 check.

조건을 만족하지 못하는 경우를 벗어나 yes 를 출력하기 위한 조건 elif 에 닫힌 같은 형태의 괄호가 등장하면 pop() 으로 제거.

 

열린 괄호는 순차적으로 쌓아 올리고 닫힌 괄호가 나오면 순차적으로 제거하는 조건으로 문제 해결.

 

 

 

코드 보기

import sys
inputdata = sys.stdin.readline

while True:
    inspection_data = str(inputdata().rstrip())
    
    if inspection_data == '.':
        break
    
    bracket_stack = []
    check = True
    
    for char in inspection_data:
        if char == '(' or char == '[':
            bracket_stack.append(char)
        elif char == ')':
            if not bracket_stack or bracket_stack[-1] == '[':
                check = False
                break
            elif bracket_stack[-1] == '(':
                bracket_stack.pop()
        elif char == ']':
            if not bracket_stack or bracket_stack[-1] =='(':
                check = False
                break
            elif bracket_stack[-1] == '[':
                bracket_stack.pop()
    
    if check == True and not bracket_stack:
        print('yes')
    else:
        print('no')



# So when I die (the [first] I will see in (heaven) is a score list).
# [ first in ] ( first out ).
# Half Moon tonight (At least it is better than no Moon at all].
# A rope may form )( a trail in a maze.
# Help( I[m being held prisoner in a fortune cookie factory)].
# ([ (([( [ ] ) ( ) (( ))] )) ]).
#  .
# .

# yes
# yes
# no
# no
# no
# yes
# yes