알고리즘

파이썬으로 여러 개 입력 받기 (input, sys.stdin.readline)

홍구리당당 2023. 10. 16. 23:20

백준 문제는 보통 입력 값이 여러 개 주어진다. 한 줄에 한 입력값만 있기도 하고, 여러 입력값들이 띄어쓰기를 기준으로 나뉘어 한 줄에 주어지기도 하고, 배열로 주어지기도 하고... 매우 다양하다.

때문에 내가 쓰는 프로그래밍 언어로 어떻게 입력받을지 알아두는 것이 중요하다.

(다양한 입력 예시들... 한 줄에 숫자 여러 개가 주어지기도 하고, 숫자와 문자가 섞이기도 하고, 하나만 주어지기도 한다.)

input을 활용하자.

1. 값 한개만 받을 경우

# 문자열 한 개 입력받기.
my_str = input()

# 정수 한 개 입력받기
my_num = int(input())

2. 한 줄에 값 여러 개 입력 받기

# input: abc def ghi
# output: ["abc", "def", "ghi"]
num_list = list(map(str, input().split()))

# input: 1 2 3
# output: [1, 2, 3]
num_list = list(map(int, input().split()))

a, b, c = map(int, input().split())

3. 한 줄당 문자열 한 개, 여러 줄 입력 받기.

# 줄 개수는 n 이라 가정.

str_list = [input() for _ in range(n)]

sys.stdin.readline 를 활용하자.

사실 input 함수는 속도가 느린 게 문제이다. sys.stdin.readline 은 한 줄에 입력 하나를 받는 메소드인데, input 보다 훨씬 빠르므로 시간 제한으로부터 좀 더 자유롭다.

따라서 여러 줄로 입력을 받을 경우 sys.stdin.readline 을 활용해보자.

1. 정수 한 개 입력 받기

import sys

num = int(sys.stdin.readline())

2. 한 줄에 정수 여러 개 입력 받기

import sys

a, b, c = map(int,sys.stdin.readline().split())
num_list = list(map(int,sys.stdin.readline().split())

3. 문자열 여러 줄 입력 받기

# 문자열을 n 줄 입력받는다고 가정.
import sys

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