백준 4949 - 균형잡힌 세상 (Python)

2023. 7. 28. 06:19알고리즘

문제

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

 

4949번: 균형잡힌 세상

각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에

www.acmicpc.net

풀이

while True:
    text = input()
    b = []
    if text == '.':
        break
    for c in text:
        if c == '(' or c == '[':
            b.append(c)
        elif c == ')':
            if b and b[-1] == '(':
                b.pop()
            else:
                b = ['no']
                break
        elif c == ']':
            if b and b[-1] == '[':
                b.pop()
            else:
                b = ['no']
                break
    if len(b) == 0:
        print('yes')
    else:
        print('no')

 

각 테스트 케이스의 문자열에 대하여

앞에서 부터 탐색하여, 문자가 "(" 또는 "[" 이면 리스트에 저장해둔다.

")" 가 입력되었을 때 리스트의 마지막 값이 "(" 이면 제거해주고, 아니면 no를 반환해준다.

마찬가지로 "]" 가 입력되었을 때 리스트의 마지막 값이 "[" 이면 제거해주고, 아니면 no를 반환해준다.

모든 괄호가 쌍이 맞아서 사라졌으면 yes를 출력해주면 된다.

 

괄호를 저장해두는 b가 스택과 비슷하게 동작한다(LIFO)