자료구조&알고리즘/알고리즘
IO_BOJ #11718 / 11719: 그대로 출력하기
StoneSeller
2022. 3. 29. 14:05
https://www.acmicpc.net/problem/11718
입력 받은 대로 출력하는 프로그램을 작성하시오.
입력
입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다.
출력
입력받은 그대로 출력한다.

# 정답 코드
while True:
try:
print(input())
except EOFError:
break
# 출력 초과 코드
import sys
def input():
return sys.stdin.readline().rstrip()
while True:
try:
print(input())
except EOFError:
break
이 문제의 목적은 문자열을 올바르게 입력받고 파일의 끝(EOF)을 올바르게 판단하는 법을 연습하는 것이다.
총 몇 줄이 주어진다 등의 정보는 절대 입력으로 주지 않는 상황이다.
또한 단순히 키보드로 입력 내용만 적고 프로그램이 종료되지 않은 상태까지만 봐서는 EOF를 제대로 처리했는지 알 수 없다.
더 이상 읽을 게 없을 때 프로그램을 종료하는 법을 알아야 한다.
파일의 끝은 Ctrl + D로 입력할 수 있다.
파이썬의 내장 함수 input의 경우 EOF를 만나게 되면 EOFError를 발생시키기 때문에 try-except 문을 통해 EOFError를 찾아서 끝낼 수 있다.
Python의 경우 입력을 받을 수 있는 방법이 대표적으로 input() 과 sys.stdin.readline() 2가지가 존재한다.
input() 은 파이썬의 내장함수이고, sys.stdin 은 File objects 이다.
input()
입력값을 넣고 엔터를 치면 그 때 발생한 개행문자(\n)를 없애고 문자열로 만들어서 리턴한다.
또한, 더 이상 받을 입력이 없으면 EOFError를 출력한다.
sys.stdin.readline()
sys라는 모듈의 파일 객체 stdin의 메소드 중 readline()을 사용한다는 의미이다.
readline()은 입력을 읽을 때 한 번에 한 줄씩 읽는데, 이 말은 여러 줄의 입력이 있을 때 한 줄을 읽고 나면 그 다음 줄을 가리킨다는 뜻이다.
input()과 sys.stdin.readline() 의 차이점
- input()은 공백을 제거하고 결과를 리턴
반면에 sys.stdin.readline()은 공백, 개행문자등을 함께 리턴하므로 제거하기 위해서는 strip()을 써야함sys.stdin.readline().strip() - input()은 더이상 읽을게 없으면 EOF에러를 발생sys.stdin.readline()은 읽을게 없을때는 빈 문자열을 리턴하므로 입력초과 발생 우려가 있다.
import sys
>> s = sys.stdin.readline()
>> print(list(s))
hello
['h','e','l','l','o','\n']
>> s = input()
>> print(list(s))
hello
['h','e','l','l','o']
728x90