알고리즘 문제 사이트마다 입력과 출력 방식이 조금씩 다른데,
프로그래머스는 로직만 작성하고 백준에서는 문제에 나와있는대로 입력과 출력까지 작성해야 한다.
다양한 문제 풀이 환경에 대비해서 입력과 출력 방법을 알아두면 좋을 것 같다
1. 입력 받기
입력 값이 큰 경우를 대비해서
input() 대신 sys.stdin.readline() 을 사용하는 것이 유리하다
📌 기본 입력 처리
import sys
input_func = sys.stdin.readline
n = int(input_func()) # 정수 하나 입력 받기
arr = list(map(int, input_func().split())) # 한 줄에 여러 정수 입력 받기
sys.stdin.readline()은 개행 문자 (\n)도 같이 입력받기 때문에,
strip()을 사용하여 공백을 제거해주는 것이 좋다
s = input_func().strip() # 문자열 입력받기
📌 여러 줄 입력 받기
import sys
input_func = sys.stdin.readline
n = int(input_func()) # 첫 줄에 입력될 정수 개수
arr = [int(input_func().strip()) for _ in range(n)] # n개의 정수를 줄마다 입력받아 리스트로 저장
2. 출력 하기
출력할 데이터가 많을 경우, print() 대신 sys.stdout.write() 를 사용하여 속도를 높일 수 있다
📌 기본 출력 처리
import sys
sys.stdout.write("Hello\n")
📌 여러 줄 한번에 출력 하기
import sys
result = ["Hello", "World"]
sys.stdout.write("\n".join(result) + "\n")
3. 데이터 세팅하기
📌 리스트로 입력받기
arr = list(map(int, input_func().split())) # 한 줄에 공백으로 구분된 정수 입력받기
📌 딕셔너리로 입력받기
n = int(input_func())
data = {}
for _ in range(n):
key, value = input_func().split()
data[key] = int(value)
print(data)
📌 집합(Set)으로 입력받기
n = int(input_func())
unique_numbers = set(map(int, input_func().split()))
print(unique_numbers)
📌 튜플 리스트로 입력받기
n = int(input_func())
coordinates = [tuple(map(int, input_func().split())) for _ in range(n)]
print(coordinates)
4. 왜 더 빠를까?
- input()은 내부적으로 **sys.stdin.readline()**을 호출하지만,
추가로 문자열 처리가 포함되어 있어 상대적으로 느리다. - print()는 자동으로 줄 바꿈과 출력 버퍼 플러시를 수행하여 느리다.
- sys.stdout.write()는 줄 바꿈을 직접 추가해야 하지만, 버퍼에 한 번에 쓰기 때문에 빠르다.
'Python > 알고리즘' 카테고리의 다른 글
[Python] 파이썬으로 알고리즘 풀기 전 필수 개념 (0) | 2025.04.03 |
---|