[백준] 4949번 : 균형잡힌 세상 (파이썬)

뚝딱이 공학도·2022년 2월 19일
0

문제풀이_백준

목록 보기
64/160



문제




나의 최종 답안

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

최종 print문에서 출력 실수가 있었다.(소문자를 대문자로 출력함)

접근방법

  • 9012번 괄호 문제와 유사한 문제이다. 대괄호(])라는 조건을 하나 더 추가해주면 된다.
  • 반복입력 받고, .을 만나면 종료하므로 while문을 사용한다.


나의 첫번째 답안

import sys
input=sys.stdin.readline

while True:
    s=input()
    arr=[]
    if s=='.':
        break
    for i in s:
        if i=='(' or i=='[':
            arr.append(i)
        elif i==')':
            if len(arr)!=0 and arr[-1] == '(':
                arr.pop()
            else:
                arr.append(i)
                break
        elif i==']':
            if len(arr)!=0 and arr[-1] =='[':
                arr.pop()
            else:
                arr.append(i)
                break
    if len(arr)==0:
        print('YES')
    else:
        print('NO')

입출력 시간을 감소시키기 위해 import sys input=sys.stdin.readline를 사용해주었는데, 출력 초과 라는 결과가 나왔다.
출력 초과는 처음이라 찾아보니 이라고 한다.

알고보니 sys.stdin.readline을 사용하면 공백문자까지 받아와서 그런다고 한다.
이를 sys.stdin.readline().rstrip() 로 변경하여 사용하면 공백문자를 제거할 수 있다고 한다.(참고:https://www.acmicpc.net/board/view/63774)


나의 두번째 답안

import sys
#input=sys.stdin.readline
input = lambda: sys.stdin.readline().rstrip()
while True:
    s=input()
    arr=[]
    if s=='.':
        break
    for i in s:
        if i=='(' or i=='[':
            arr.append(i)
        elif i==')':
            if len(arr)!=0 and arr[-1] == '(':
                arr.pop()
            else:
                arr.append(i)
                break
        elif i==']':
            if len(arr)!=0 and arr[-1] =='[':
                arr.pop()
            else:
                arr.append(i)
                break
    if len(arr)==0:
        print('YES')
    else:
        print('NO')

위의 질문을 참고하여 코드를 수정해보았다.
여전히 틀렸습니다. 라는 결과가 수행되었다.(이 때 대문자를 소문자로 바꿔주었더라면...)


나의 세번째 답안

while True:
    s=input()
    arr=[]
    if s=='.':
        break
    for i in s:
        if i=='(' or i=='[':
            arr.append(i)
        elif i==')':
            if len(arr)!=0 and arr[-1] == '(':
                arr.pop()
            else:
                arr.append(i)
                break
        elif i==']':
            if len(arr)!=0 and arr[-1] =='[':
                arr.pop()
            else:
                arr.append(i)
                break
    if len(arr)==0:
        print('YES')
    else:
        print('NO')

이때 여전히 대문자 때문이라는 생각을 하지 못해..
아예 sys를 import하지 않았다.
당연히 안됨


나의 네번째 답안

while True:
    s=input()
    arr=[]
    if s==".":
        break
    for i in s:
        if i=="(" or i=="[":
            arr.append(i)
        elif i==")":
            if len(arr)!=0 and arr[-1] == "(":
                arr.pop()
            else:
                arr.append(")")
                break
        elif i=="]":
            if len(arr)!=0 and arr[-1] =="[":
                arr.pop()
            else:
                arr.append("]")
                break
    if len(arr)==0:
        print('YES')
    else:
        print('NO')

최종 제출 전 마지막 답안이다.
코드에서 큰 문제가 안보여
혹시나 하는 마음에 작은 따옴표를 다 큰 따옴표로 바꿔주었다ㅠ(똑같은거 아는데 채점 시스템은 좀 다른가해서.. 바꿔보았다..ㅎㅏ)
여전히 오류..
문제를 다시 읽어보아도 놓친 조건이 없어보였다.
이에 다른 분들 코드를 찾아보았고,, 출력 조건이 잘못되었다는 것을 알게되었다.. ㅜ

이에 출력을 수정하였고, 위와 같이 최종 답안을 얻어낼 수 있었다...


이런 실수는 어떻게 고쳐나가야 하는 것인지.. 문제를 꼼꼼히 읽는다고 읽었는데 너무 속상하다..
그래도 오늘 여러 시행착오를 거치면서 배운 것도 있었다.
import sys input=sys.stdin.readline 는 공백문자를 포함한다는 것
공부하는 과정이고, 연습하는 과정이니 더 꼼꼼히 할 수 있도록 노력해봐야겠다.

0개의 댓글