본문 바로가기
algorithm/공부

[Python] input, sys :: 입력값을 받는 두가지 방법

by eunsoa 2025. 1. 28.

 

최근에 코테 언어를 파이썬으로 변경하면서 입출력 방식부터 다시 공부중에 있다.

 

이때 파이썬에서는 입력받는 방식이 input, sys 두가지로 나뉘는데 오늘은 이 둘의 차이를 정리하고자 한다.

 


코딩 테스트에서는 문제 조건에 따라 여러 가지 입력 방식이 필요하다.

입력 크기, 공백 여부, 여러 줄 입력 여부 등을 고려하여 적절한 방법을 선택해야 한다.

 

파이썬의 입력 방식에 관하여 아래와 같이 정리했다.

 

 

 

1. 기본적인 input() 사용

  • 한 줄 입력을 받을 때 사용한다.
n = int(input()) # 정수 입력 s = input() # 문자열 입력

 

  • 예제
입력: 10 hello 출력: 10 hello
 
  • 📌 사용 상황:
    • 입력이 작을 때
    • 한 줄씩 입력받을 때

 

2. 여러 개의 정수 입력 (split() 사용)

  • 공백으로 구분된 여러 개의 숫자 입력을 받을 때 사용한다.
a, b, c = map(int, input().split())
 
  • 예제
입력: 10 20 30 출력: 10 20 30
 
 
  • 📌 사용 상황:
    • 공백 기준으로 여러 개의 숫자가 한 줄에 주어질 때

 

 

3. 리스트 형태로 입력 받기

  • 여러 개의 정수를 리스트로 받을 때 사용합니다.
arr = list(map(int, input().split()))
 
  • 예제
입력: 1 2 3 4 5 출력: [1, 2, 3, 4, 5]

 

  • 📌 사용 상황:
    • 한 줄에 여러 개의 정수를 입력받아 리스트로 저장할 때

 

 

✅ 4. 여러 줄 입력 받기 (for 문 사용)

  • 입력 개수가 정해진 경우 for 문을 활용합니다.
n = int(input())  # 입력 개수
arr = [int(input()) for _ in range(n)]
 
  • 예제
입력:
3
10
20
30

출력:
[10, 20, 30]
 
 
  • 📌 사용 상황:
    • 여러 줄에 걸쳐 입력을 받아야 할 때
    • 입력 개수가 처음에 주어질 때

 

5. 여러 줄 입력 (sys.stdin.read() 사용)

  • 입력 개수가 많을 때 sys.stdin.read()를 사용하면 input()보다 빠릅니다.
import sys data = sys.stdin.read().splitlines()
 
  • 예제
입력:
hello
world
python

출력:
['hello', 'world', 'python']
 
  • 📌 사용 상황:
    • 입력 개수를 미리 모를 때
    • 입력 속도가 중요한 문제 (백준, 프로그래머스 대용량 입력)

 

 

6. 빠른 입력 (sys.stdin.readline() 사용)

  • 반복문에서 input() 대신 sys.stdin.readline()을 사용하면 속도가 훨씬 빨라집니다.
import sys 
n = int(sys.stdin.readline()) # 정수 입력

import sys 
n, m = map(int, sys.stdin.readline().split()) # 공백 구분된 정수 입력
 
  • 📌 사용 상황:
    • 입력 개수가 크고 input()보다 빠른 속도가 필요할 때

 

 

7. 2차원 리스트 입력 받기

  • 행렬 형태의 입력을 받을 때 사용합니다.
n, m = map(int, input().split())  # 행, 열 개수
matrix = [list(map(int, input().split())) for _ in range(n)]
  • 예제
입력:
3 3
1 2 3
4 5 6
7 8 9

출력:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

 

  • 📌 사용 상황:
    • 그래프, 행렬, DP 테이블 등에서 사용

 

 

8. 문자열을 리스트 형태로 받기

  • 공백 없이 연속된 문자열을 리스트로 변환
s = list(input())
 
  • 예제
입력:
hello

출력:
['h', 'e', 'l', 'l', 'o']

 

  • 📌 사용 상황:
    • 문자열을 한 글자씩 리스트로 저장할 때

 

 

9. 숫자가 섞인 문자열을 리스트로 변환

  • 문자열과 숫자가 혼합된 입력을 리스트로 변환
s = input()
nums = list(map(int, s))
 
  • 예제
입력:
12345

출력:
[1, 2, 3, 4, 5]
 
  • 📌 사용 상황:
    • 문자열로 주어진 숫자를 리스트로 변환할 때

 

 

10. 입력을 여러 개 받을 때 (sys.stdin.read() 활용)

  • 입력 개수를 모르는 경우 한 번에 입력 받고 split()으로 처리
import sys 
data = list(map(int, sys.stdin.read().split()))
 
  • 📌 사용 상황:
    • 입력 개수가 정해지지 않았을 때
    • 줄바꿈 또는 공백으로 구분된 데이터를 한 번에 받기

 

 

정리: 입력 방식 선택 기준

입력 방식사용 상황예제

input() 간단한 한 줄 입력 n = int(input())
split() 공백으로 구분된 여러 값 입력 a, b = map(int, input().split())
list(map(int, input().split())) 리스트 형태로 입력 arr = list(map(int, input().split()))
sys.stdin.readline() 빠른 입력 필요 시 n = int(sys.stdin.readline())
sys.stdin.read() 여러 줄 입력 data = sys.stdin.read().splitlines()
for + input() 여러 줄 입력 (개수 정해짐) arr = [input() for _ in range(n)]
2차원 리스트 입력 행렬 입력 matrix = [list(map(int, input().split())) for _ in range(n)]

 

 

 

 

🚀 결론

  • input() → 기본 입력
  • split() → 여러 개 입력
  • sys.stdin.readline() → 빠른 입력
  • sys.stdin.read() → 입력 개수를 모를 때
  • for문 → 여러 줄 입력
  • 2차원 리스트 → list(map(int, input().split())) for _ in range(n)

📌 문제 조건에 맞게 적절한 입력 방식을 사용하면 속도와 효율이 향상됩니다! 🚀