개발 연습장/백준 문제풀이

[파이썬, Python] 백준 4949: 균형잡힌 세상

LooanCheong 2023. 3. 8. 10:37
반응형

문제

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

 

4949번: 균형잡힌 세상

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

www.acmicpc.net

코드

while True:
    text = input()
    if text == '.':
        break
    stack = []
    tf = True
    for i in text:
        if i == '(' or i == '[':
            stack.append(i)
        elif i == ')':
            if not stack or stack[-1] == '[':
                tf = False
                break
            elif stack[-1] == '(':
                stack.pop()
        elif i ==']':
            if not stack or stack[-1] =='(':
                tf = False
                break
            elif stack[-1] == '[':
                stack.pop()
    if tf == True and not stack:
        print('yes')
    else:
        print('no')

설명

괄호의 조건을 조금 더 생각해야 하는 문제다.

우선 3가지 경우를 생각해야 한다.
1. 괄호가 '(' 혹은 '['인 경우
2. 괄호가 ')'인 경우
3. 괄호가 ']'인 경우

1번의 경우는 그냥 stack에 더해준다.

2번의 경우는 stack이 없거나 stack의 마지막 괄호가 '['인 경우라면,
문장의 괄호가 잘못된 경우이므로 반복문을 종료하고 no를 출력한다.
만약 stack의 마지막 괄호가 '('인 경우라면,
괄호를 없애준다(괄호끼리 없애준다)

3번의 경우는 2번과 유사하게 진행한다.

반복문을 다 진행하고 stack에 남은 문장이 없다면,
yes를 출력하고 그렇지 않으면 no를 출력한다.

반응형