CodingTest/Baekjoon

[백준/Python] 11718번 : 그대로 출력하기

JuniTech 2023. 5. 15. 09:00
728x90
시간 제한  메모리 제한 문제 티어 정답 비율
1 초 256MB
브론즈 V
30.762%

📜 문제

입력 받은 대로 출력하는 프로그램을 작성하시오.

 

 

📥입력

입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다.

 

📤출력

입력받은 그대로 출력한다.

 

 

💡풀이

나는 맨 처음에 "이게 왜 정답률이 30%이지?" 하고 의문을 가졌다.
일단 내가 처음에 풀이한 코드는 다음과 같다.
 
import sys
while True:
    try:
        print(sys.stdin.readline().rstrip())
    except EOFError:
        break​
  

이 문제는 몇 번의 입력이 있었는지 주어지지가 않아 try & except 문을 통해 EOF 에러발생시 break를 해줌으로써 해결하였다.

참고로 EOF 는 End Of File 의 줄임말로, 말 그대로 입력값이 없어지는 상황을 받아준다.

그랬더니 웬 걸 출력초과 오류가 나버렸다.. ㅡ,.ㅡ

그래서 다음과 같이 input()로 코드를 작성했다.

while True:
    try:
        print(input())
    except EOFError:
        break

그랬더니 이번엔 정답으로 나왔다. "왜 sys.stdin.readline() 으로 하면 출력 초과가 나올까?"하고 의문을 가졌고, 한 번 찾아봤더니 다음과 같았다.

https://www.acmicpc.net/board/view/57241

 

글 읽기 - [Python3] sys.stdin.readline은 안되나요?

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net

 

여기서 input()과 sys.stdin.readline()의 차이점이 나온다. input()은 EOF를 받을 때 EOFError를 일으키지만 sys.stdin.readline은 EOF를 받을 때 빈 문자열을 리턴을 한다. 따라서 오류가 발생하지 않고 틀리게 되는 것이다.

 

만약에 sys.stdin.readline 함수를 사용하고 싶다면, EOFError를 발생시키지 않고 EOF를 빈 문자열로 받는 특성을 이용해 if 문으로 확인하는 식으로 코드를 작성하면 될 것이다. 그 코드는 다음과 같다.

import sys

while True:
  s = sys.stdin.readline().rstrip()
  if s == '':
    break
  else:
    print(s)

 

빈 문자열을 확인할려고 할 때는 == '' 또는 == "" 을 이용하여 참, 거짓을 판별하면 된다.