본문 바로가기
Coding Test (코딩 테스트)

코딩테스트 8일차(2025.01.22) - 15552번(빠른 A+B)

by BioLearner 2025. 1. 22.
반응형

 

여기서 말하는 사항은 다음과 같다. 

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을 사용해야하며, 출력 형식이 번거롭다는 단점이 있다. 또한 문자열과 숫자 간의 타입 변환이 필요하다. 

반응형