Algorithm & Data Structure/문제 풀이

[4949] 균형잡힌 세상 (Python)

뭉지(moonz) 2021. 6. 21. 15:34
반응형

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

 

4949번: 균형잡힌 세상

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

www.acmicpc.net

문제

 

생각 정리

  • 일단 stack으로 하면 된다는 생각까지가 힘들었다.. 만약 stack으로 해줄 수 있다는 걸 알았으면 시간이 더 단축됐을텐데말이다.
  • stack을 이용하면 '(' or '[' 는 그냥 입력하고 ')' or ']'는 각각 '(' or '['가 있는지 확인을 해준 후, 있다면 빼주는 것이다.
  • stack에 들어가는 것은 '('와 '['  뿐인 것이다.
  • stack이 비어있거나 최상위 값이 '[' or '('가 아닌 경우, 균형을 의미하는 flag 변수를 false로 바꿔준 후 break한다.
  • 마지막에 flag 변수와 stack에 값이 남아있는지 확인하여 'yes'를 출력할지 'no'를 출력할지 정한다.
import sys
input = sys.stdin.readline
while True:
    s = input()
    print(s,'.')
    flag = True
    if s == '.':
        break
    stack = []
    for i in s:
        if i in '([':
            stack.append(i)
        elif i == ')':
            if not stack or stack.pop() != '(':
                flag = False
                break
        elif i == ']':
            if not stack or stack.pop() != '[':
                flag = False
                break
    if not stack and flag:
        print("yes")
    else:
        print('no')

계속 '출력초과' 라는 결과가 뜬다. 이 코드의 문제는 무엇일까?

readline()의 공백문자('\n') 때문이다.

 

그래서 readline() 뒤에 rstrip()을 이용해서 제거해주어야한다. 네번째 line만 다음과 같이 바꿔주면 된다.

    s = input().rstrip()

 

 

반응형