입력 종합 선물세트

엄혜영·2024년 3월 15일
0
post-thumbnail

[BOJ] 15552 빠른 A+B
[BOJ] 10951 A+B - 4


지금까지 알고리즘 문제를 풀 때 한 언어만 사용하지 않고 이것 저것 썼었는데 당분간은 파이썬으로 풀기로 했다. 파이썬을 풀며 당황스러웠던..? 잘 몰랐던 입력 관련 내용을 정리 해보려 한다.


빠른 A+B

이 문제는 출력은 단순한데 출력값을 잘 내는것이 핵심이 아니다. 핵심은 시간초과 없이 입력을 받아 결과를 내는 데에 있다.

지금까지는 입력을 받기 위해 input() 함수를 사용해도 문제가 없었다.
반복문으로 여러 줄을 입력 받아야 할 때 input()으로 받는다면 시간 초과가 발생할 수 있다.
이러한 상황에서는 sys.stdin.readline()을 사용할 수 있다.

import sys

temp = sys.stdin.readline()
print(temp) # "Hello, World!\n"

A+B - 4

이 문제 또한 출력값을 잘 내는 것이 핵심이 아니다. 핵심은 파일의 끝(EOF)을 올바르게 판단하는 데 있다.

생각해보니 나는 파이썬으로 코딩을 하며 EOF를 신경써본 경험이 없었다.
백준의 질문 게시판과 여러 블로그를 참고한 결과 두 가지 방법을 사용할 수 있음을 알게 되었다.

  1. input() 함수를 이용하는 방법
    try, except로 eof 처리가 가능하다.
while True:
    try:
        A = int(input())
        print(A)
    #EOFError를 생략해도 except만 있으면 넘어감
    except :
        break
  1. sys.stdin.readline()을 이용하는 방법
    이 함수는 eof를 만났을 때 except를 일으키는게 아니라 순수하게 빈 문자열을 반환한다.
    sys.stdin.readline 라이브러리라서 끝에 무조건 \n이 붙는데, EOF를 만나면 \n조차도 없는 빈 문자열이 입력된다.
import sys

while True:
	# 보다시피 sys 라이브러리의 함수라서 import sys를 해야함.
    temp = sys.stdin.readline()
    
    if temp == "":
        break
    else:
        temp = int(temp)
        print(temp)

참고 자료

Python sys.stdin.readline() 사용 / 알고리즘 입력 받기
★☆★☆★ [필독] A+B - 4 FAQ ★☆★☆★
파이썬에서 EOF 입력처리

profile
누워있는게 좋은 완벽주의자

0개의 댓글

관련 채용 정보