여기서 말하는 사항은 다음과 같다.
1. input() 대신 sys.stdin.readline() 사용
기본적으로 Python의 input()은 입출력 속도가 느리다. 대신 sys.stdin.readline()을 사용하면 속도를 높일 수 있다.
다만, 이 방식은 입력된 문자열의 끝에 개행 문자(\n)가 포함되므로, 문자열로만 저장하려면 .rstrip()을 사용해 개행 문자를 제거해야 한다.
import sys
# 기본 input() 방식
value = input()
# sys.stdin.readline() 방식 (개행 문자 제거)
value = sys.stdin.readline().rstrip()
2. 입출력 스트림을 효율적으로 처리
또한 입력과 출력을 나누어서 처리할 필요가 없다.
테스트케이스를 전부 입력받아 한꺼번에 저장하고 처리한 뒤 출력하는 방식 대신, 하나 입력받고 바로 처리 후 출력하는 방식이 더 간단하고 효율적이다.
즉, 입력을 받으면 바로 처리하고, 그 결과를 즉시 출력하면 된다.
잘못된 방식:
import sys
input = sys.stdin.readline
n = int(input().rstrip())
data = []
for _ in range(n):
data.append(int(input().rstrip()))
for num in data:
print(num)
더 효율적인 방식:
import sys
input = sys.stdin.readline
n = int(input().rstrip())
for _ in range(n):
num = int(input().rstrip())
print(num)
첫 줄 더할 갯수, 그 다음 줄 둘이 더할 갯수
내 풀이
sys사용, 즉시 처리 하기
import sys
input = sys.stdin.readline()
n = int(input().rstrip())
for _ in range(n):
A, B = int(input().rstrip().split())
print(A + B)
결과: 틀림
정답
import sys
input = sys.stdin.readline
output = sys.stdout.write
T = int(input().rstrip()) # 첫 번째 줄: 테스트케이스의 개수
for _ in range(T):
A, B = map(int, input().rstrip().split()) # 한 줄 입력받아 A와 B로 나눔
output(f"{A + B}\n") # 결과를 출력
코드 설명
1. sys.stdin.readline사용
- input() 대신 sys.stdin.readline을 사용하여 입력속도를 최적화함.
2. sys.stdin.write 사용
- print() 대신 sys.stdout.write를 사용하여 출력 속도를 높인다. print()는 내부적으로 개행 처리를 포함한 부가작업이 있어 속도가 느릴 수 있다.
3. .rstrip() 활용
- sys.stdin.readline으로 입력받은 문자열 끝에 포함된 개행 문자 (\n)를 제거하기 위해 .rstrip()을 사용함
4. 반복문에서 처리 후 바로 출력
- 모든 입력을 저장하지 않고, 입력받은 즉시 처리하고 출력하므로 메모리 사용을 줄이고 속도를 높인다.
틀린 이유
1. input = sys.stdin.readline()에서 ()는 없어야한다. 그래야 input()이 sys.stdin.readline()을 참조할 수 있다.
2. A, B = int(input().rstrip().split())에서 이렇게 사용하는 게 아니라 map을 사용해야한다.
고찰
sys.stdin.readline과 sys.stdin.write와 .rstrip을 사용하는 것을 잊지 않아야겠다.
질문: sys.stdin.write사용 시 문제점은 뭘까?/n을 사용해야하며, 출력 형식이 번거롭다는 단점이 있다. 또한 문자열과 숫자 간의 타입 변환이 필요하다.
'Coding Test (코딩 테스트)' 카테고리의 다른 글
코딩테스트 9일차(2025.01.23) - 11022번(A+B - 8) (0) | 2025.01.23 |
---|---|
코딩테스트 9일차(2025.01.23) - 11021번(A+B - 7) (0) | 2025.01.23 |
코딩테스트 8일차(2025.01.22) - 25314번(코딩은 체육과목 입니다) (0) | 2025.01.22 |
코딩테스트 8일차(2025.01.22) - 25304번(영수증) (0) | 2025.01.22 |
코딩테스트 8일차(2025.01.22) - 8393번(합) (0) | 2025.01.22 |