최대 1,000,000개의 A+B 연산을 한정된 시간 내에 수행하는 코드를 만들어야 하는 문제다.
여기서 우리는 처음으로 빠른 입출력을 배우게 될 것이다. 이 스킬은 앞으로도 여러분의 실행 속도를 높일 것이기에 반드시 배워야 한다.
import sys
if __name__ == '__main__':
T = int(sys.stdin.readline().rstrip())
for _ in range(T):
A, B = map(int, sys.stdin.readline().rstrip().split())
print(A + B)
이 문제의 핵심은 파이썬의 빠른 입력을 써야 하는 것이다. sys.stdin.readline().rstrip() 을 쓰면 된다.
당연하겠지만, 이 코드보다 느리게 동작하는 코드인 input()을 쓰면 시간 초과를 받는다. (참고 - [BOJ] 1000번 A+B 풀이)
sys.stdin.readline() 은 입력받은 것 중 한 줄을 그대로 읽는다는 뜻이며, rstrip()은 해당 문장의 오른쪽에 있는 공백 문자를 없애는 메서드다.
rstrip()을 쓰는 이유는, 말 그대로 한 줄을 그대로 가져오기 때문이다. input()과 다르게 마지막의 '\n'도 같이 받는다. 이 개행 문자를 지워야 수정을 가하기 편해진다.
물론 rstrip()을 안 써도 되는 경우가 있다. 다만 나는 혹시 모를 일을 방지하기 위해 쓰는 것이 낫다고 생각한다.
여기서 input()과 sys.stdin.readline()의 차이가 무엇인지 보자.
input()은 () 안에 문자열을 넣으면 콘솔 창에 글자가 나오는 작업을 거친다. 또한 '\n', enter키가 들어올 때까지 입력을 기다린다.
반면 sys.stdin.readline()은 콘솔에 무엇을 출력하지도 않고 한 줄을 문자열로 즉시 가져온다.
이 행동 차이 때문에 sys.stdin.readline()은 input()보다 매우 빠른 입력을 받게 되는 것이다.
처음 보는 사람들이라면 이게 무슨 말장난인가 싶겠지만, 이 차이는 컴퓨터에게 있어 속도 차이가 매우 나는 것을 이해해야한다.
간단하게 비유하자면, 콜라 6병을 낱개로 일일이 집고 가져가서 하나씩 내려놓으면서 계산하는 것(input())과 6개를 1개로 묶은 것을 가져가 바로 계산하는 것(sys.stdin.readline())의 차이로 보면 된다.
따라서 앞으로의 PS를 하면서 입력을 받는다면 빠른 입출력을 쓰는 것이 낫다.
물론 이 방법을 제외해야 할 때도 있는데, 이는 내가 올린 [파이썬 기초 문법 #1] 기본 입출력 - 들어가기 앞서 포스트를 참고하기 바란다.
'Python > 백준 문제 풀이' 카테고리의 다른 글
[BOJ] 25083번 새싹 풀이 (0) | 2022.07.15 |
---|---|
[BOJ] 10172번 개 풀이 (0) | 2022.07.15 |
[BOJ] 10171번 고양이 풀이 (0) | 2022.07.15 |
[BOJ] 10951번 A+B - 4 풀이 (0) | 2022.07.15 |
[BOJ] 1000번 A+B 풀이 (0) | 2022.07.14 |
댓글