알고리즘 공부/백준

(Python)백준 코딩테스트 연습 - 균형잡힌 세상(4949)

HRuler 2023. 1. 8. 15:42

1. 문제

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

 

4949번: 균형잡힌 세상

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

www.acmicpc.net

2. 풀이

while True:
    # 각 문자열 한 줄씩 입력
    s = input()
    # 입력된 문자열이 .인 경우 반복문 break
    if s == '.':
        break
    # 대괄호, 소괄호를 append, pop할 list
    s_list = []
    balance = True
    for i in s:
        if i == '(':
            s_list.append('(')
        elif i == ')':
            if len(s_list) == 0:
                balance = False
                break
            if s_list.pop() != '(':
                balance = False
                break
        elif i == '[':
            s_list.append('[')
        elif i == ']':
            if len(s_list) == 0:
                balance = False
                break
            if s_list.pop() != '[':
                balance = False
                break
    if len(s_list) > 0 or not balance:
        print('no')
    else:
        print('yes')

3. 후기

 - 처음 문제를 보고 대괄호와 소괄호를 각각 개수로 생각하여 괄호가 열리면 +, 닫히면 -를 하는 방식을 생각해보았는데 '([)]'와 같이 엇갈린 형태의 괄호를 커버하지 못하는 문제가 있었다. 위와 같은 프로세스의 형태는 보았을때 스택으로 해결해보려는 생각을 먼저 해보도록 해야겠다.