본문 바로가기

Baekjoon

[Baekjoon]백준 4949 균형잡힌 세상(실버 4) - Python

문제설명
예제

문제를 살펴보면 이전 문제와 유사하지만 이번에는 실제 문장에 적용하여 yes or no를 출력해야한다

while True: 문을 통해 무한 루프를 만들어주고 문제에서 제시한 .을 입력받으면 종료되도록 초반에 설정해준다

 

이후에 for문을 돌면서 여는 괄호라면 스택에 저장하고, 닫는 괄호라면 스택을 확인하여 짝이 맞는지 확인해주면 된다

이를 처음에 적용하여 작성한 코드이다

import sys

while True:
    stack = []
    text = sys.stdin.readline()
    
    if text == '.\n':
        break
    
    for sentence in text:
        if sentence == '(' or sentence == '[':
            stack.append(sentence)
        elif sentence == ')':
            if stack:
                if stack[-1] == '(':
                    stack.pop()
            else:
                stack.append(sentence)
                break
        elif sentence == ']':
            if stack:
                if stack[-1] == '[':
                    stack.pop()
            else:
                stack.append(sentence)
                break
    
    if len(stack) == 0:
        print('yes')
    else:
        print('no')

하지만 제출하였더니 틀렸습니다! 라는 문구를 보고 말았다 

테스트를 다 해보긴 했지만 굳이 sys.stdin.readline()을 써서 그런가 싶은 마음에 input()으로 바꾸어도 

틀렸습니다! 라는 문구는 여전했다 약 10분간의 고민 끝에 찾은건 아주 간단한 문제였다

 

현재 작성한 코드에는 스택에 내용이 존재할 때와 아닐때로 나누었는데 

만약 스택에 내용이 존재하지만 다른 괄호가 존재할 경우를 대비하지 않았다

if stack과 stack[-1] == '괄호' 를 and로 묶어두어야 만약 옳지 않은 괄호가 등장하였을 때 no를 출력하게 된다

예제의 코드는 정상 작동하였지만 일부 경우에서는 no가 나와야하지만 yes가 나올 가능성도 존재했던 것이다

 

그래서 stack 과 stack[-1]을 확인하는 코드를 한 번에 묶어 제출하였더니 정답임을 확인할 수 있었다

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