티스토리 뷰
[Python] 백준 알고리즘 온라인 저지 15552번 : 빠른 A+B
Python3 코드
import sys # sys모듈 읽어들이기
t = int(sys.stdin.readline())
for _ in range(t):
a,b = map(int, sys.stdin.readline().split())
print(a+b)
Python3 코드 풀이
1. 코드를 풀었던 전체적인 내용을 정리한다.
이번 문제는 문자를 입력받는 input 함수 대신 sys모듈 안의 stdin.readline 함수를 사용하는 문제이다. 백준 온라인 저지에서 문제를 풀면 제출한 코드를 실행시키는데 걸리는 시간을 확인할 수 있다. 그리고 그동안 풀었던 문제들에서 input 함수 대신 sys모듈 안의 stdin.readline 함수를 사용하면 시간이 단축되는 것을 볼 수 있다. 코드가 실행되는 시간을 줄일 대 유용하게 이용할 수 있는 함수이다.
하지만 나의 경우 이 문제 이후에는 주로 input 함수를 사용하였다. 시간이 단축되긴 하지만 input 함수를 사용해도 시간 초과가 발생하지 않고 문제를 풀 수 있었기 때문이다. 그런데 이번 문제는 input 함수를 사용하는 경우 시간 초과가 발생해서 문제를 풀 수가 없다. 이 문제에서 제시한 대로 input 대신sys.stdin.readline을 사용해야만 문제를 풀 수가 있다.
2. sys모듈을 불러들인다.
import sys # sys모듈 읽어들이기
stdin.readline 함수를 사용하려면 먼저 sys 모듈을 불러들여야 한다. 모듈을 불러들일 때는 import 구문을 이용해서 작성한다. 보통 import 구문은 코드 맨 윗줄에 작성한다.
3. sys.stdin.readline 함수를 사용한다.
t = int(sys.stdin.readline())
sys 모듈을 불러들였으니 sys.stdin.readline() 함수를 사용한다. 사용 방식과 기능은 input 함수를 사용할 때와 동일하다. 입력받는 문자는 사용자가 숫자를 입력하더라도 문자열로 입력받게 된다. 그래서 int 함수를 이용해서 입력받은 문자를 정수로 변환하였다.
만일 위 문장을 input 함수로 입력받았다면 아래와 같았을 것이다.
t = int(input())
4. for문안에서 두 수를 입력받는 문장을 작성한다.
for _ in range(t):
a,b = map(int, sys.stdin.readline().split())
print(a+b)
이 문제는 sys모듈 함수를 이용하는 것 말고는 백준 단계별 문제에서 바로 이전 문제와 동일하다. for문 작성방법도 동일하게 작성하면 된다. 처음에 입력받은 테스트 케이스 수만큼 두 개의 수를 입력받는다. 두 수는 공백으로 구분된 하나의 문자열로 입력받게 된다. 이 하나의 문자열은 공백을 기준으로 두 개로 나누어 주고 이때 split 함수를 이용한다. 입력받는 함수는 기존에 input을 사용했다면 이번 문제는 sys.stdin.readline( ) 함수를 사용해야 한다. 입력받은 문자열을 int 타입으로 변환하기 위해 map 함수를 이용했다.
5. input함수를 사용하는 경우
만일 이 for문도 input 함수를 이용해서 작성한다면 아래와 같다. sys.stdin.readline( ) 함수 부분만 input( ) 함수로 바꾸어 주면 된다.
for _ in range(t):
a,b = map(int, input().split())
print(a+b)
'파이썬 스킬업 > 백준 알고리즘 연습' 카테고리의 다른 글
백준 2741번 [파이썬 풀이] N 찍기 : for문, comprehension 사용 (0) | 2020.07.03 |
---|---|
백준 8393번 [파이썬 알고리즘] 합 : sum함수로 한줄 작성 (0) | 2020.07.03 |
백준 10950번 [파이썬 알고리즘] A + B - 3 (0) | 2020.07.03 |