시간 제한 | 메모리 제한 | 문제 티어 | 정답 비율 |
1 초 | 256MB | 브론즈 V | 30.762% |
📜 문제
입력 받은 대로 출력하는 프로그램을 작성하시오.
📥입력
입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다.
📤출력
입력받은 그대로 출력한다.
💡풀이
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
여기서 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)
빈 문자열을 확인할려고 할 때는 == '' 또는 == "" 을 이용하여 참, 거짓을 판별하면 된다.
'CodingTest > Baekjoon' 카테고리의 다른 글
[백준/Python] 10812번 : 바구니 (0) | 2023.05.18 |
---|---|
[백준/Python] 10811번 : 바구니 뒤집기 (0) | 2023.05.17 |
[백준/Python] 10813번 : 공 바꾸기 (0) | 2023.05.16 |
[백준/Python] 9086번 : 문자열 (0) | 2023.05.13 |
[백준/Python] 25314번 : 코딩은 체육과목 입니다 (0) | 2023.05.12 |