새소식

자료구조&알고리즘/알고리즘

IO_BOJ #11718 / 11719: 그대로 출력하기

  • -

 

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
Contents