[Python] input() vs sys.stdin.readline()

최대 1 분 소요

BOJ 10989번 푸는 도중 메모리 초과가 났다.

찾아보니 input() 떄문이다.

📌 input()

  • prompt 인수가 존재하고, 개행없이 표준 출력에 기록됨
  • 사용자 입력 받기 -> 문자열 변환 -> 개행 제거(rstrip() 함수 적용)

📌 sys.stdin.readline()

  • prompt 인수 받지 않고, 개행 문자 포함한 값을 리턴

💡 결론

  • 한 줄은 input() 받아도 무방
  • 반복문으로 여러줄 입력받을 때는 sys.stdin.readline() 써야 시간초과 발생 안함

💡 sys.stdin.readline() 사용법

📘 한 개의 정수를 입력받을 때

import sys
a = int(sys.stdin.readline())

❗️ 한줄 단위로 입력받기 때문에, 개행문자(\n)까지 저장됨
❗️ 그래서 int()로 해줘야함

📘 정해진 개수의 정수를 한줄에 입력받을 때

import sys
a,b,c = map(int, sys.stdin.readlines().split())


📘 임의의 개수의 정수를 한줄에 입력받아 리스트에 저장할 때

import sys
data = list(map(int, sys.stdin.readlines().split()))

❗️split() 안에 아무 값도 넣지 않으면 공백(스페이스, 탭, 엔터 등)을 기준으로 나눈다.

📘 임의의 개수의 정수를 n줄 입력받아 2차원 리스트에 저장할 때

import sys
data = []
n = int(sys.stdin.readline())
for i in range(n):
    data.append(list(map(int, sys.stdin.readline().split())))


📘 문자열 n줄을 입력받아 리스트에 저장할 때

import sys
n = int(sys.stdin.readline())
data = [sys.stdin.readline().strip() for i in range(n)]

❗️strip()은 문자열 맨 앞과 맨 끝의 공백문자 제거

출처

참고

태그:

카테고리:

업데이트:

댓글남기기