최근에 코테 언어를 파이썬으로 변경하면서 입출력 방식부터 다시 공부중에 있다.
이때 파이썬에서는 입력받는 방식이 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)
📌 문제 조건에 맞게 적절한 입력 방식을 사용하면 속도와 효율이 향상됩니다! 🚀
'algorithm > 공부' 카테고리의 다른 글
| [C/C++] ios::sync_with_stdio(false); 와 cin.tie(NULL);을 사용하는 이유 (1) | 2023.08.10 |
|---|---|
| [C/C++]char형 int형으로 변환 (0) | 2023.04.11 |
| 반복문 탈출 : break과 continue의 차이 (0) | 2022.10.06 |