제목 : A+B
- 문제 : 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
- 입력 : 첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)
- 출력 : 첫째 줄에 A+B를 출력한다.
첫 문제는 기본 입출력에 관한 문제다.
입력은 간단하게 정수 A와 B가 띄어쓰기로 구분되어 주어지고 출력은 그 둘의 합(A+B)을 나타내는 것인데
문제 자체는 굉장히 간단하지만 입력에 대해 이야기 하고자 이 문제를 풀었음. 난 다음과 같은 코드로 문제를 풀었다.
import sys
a, b = map(int, sys.stdin.readline().split())
print(a+b)
내가 처음 코딩 테스트를 준비할 때는 내장함수인 input()을 사용하였는데, 어떤 문제에서 시간초과가 계속 발생하여 깊은 고민에 빠지게 되었다. 분명 학생 때는 계산이 오래걸리면 cpp로 바꿔서 계산하면 되었는데… 코테에서는 그럴 수가 없으니(언어에 따라 주어지는 시간이 다른데다가 난 python만큼 cpp를 다루지도 못함)
하여간 고민하던 도중 sys.stdin.readline()
을 사용하면 된다는 팁을 보게되었다.
아마 python으로 코테 공부하시는 분들은 대부분 sys.stdin.readline()
을 input()
보다 많이 사용하실텐데
둘의 차이는 구글링하면 아주 자세하게 나온다…만 사실 잘 이해가 되지 않음.
그래서 좀 더 찾아보니 둘의 속도차이는 작동 방식에서 차이가 난다.
input()
같은 경우 입력을 받기 전에 prompt 문자열을 출력하고나서 입력을 받는데sys.stdin.readline()
은 prompt 문자열 출력이 없다- input()은 한 번의 입력마다 buffer에 저장하는 반면
sys.stdin.readline()
은 입력을 다 받아서 한 번에 buffer에 저장한다.
덕분에 코테 문제를 풀 때는 혹시 모를 시간초과를 피하기위해 sys 모듈을 주로 사용한다.
문제에 따라 주어지는 입력 방식이 다른데, 이 때 필요할 만한 sys.stdin.readline()
예시를 정리하였다.
import sys
###정수 한 개
n = int(sys.stdin.readline())
###정수 두 개
a, b = map(int, sys.stdin.readline().split())
###여러 정수를 list로 저장
data = list(map(int,sys.stdin.readline().split()))
###여러 정수를 줄에 나눠 받을 때 2d list로 저장
data = []
n = int(sys.stdin.readline())
for i in range(n):
data.append(list(map(int,sys.stdin.readline().split())))
###string을 줄로 나눠서 list로 저장
import sys
n = int(sys.stdin.readline())
data = [sys.stdin.readline().strip() for i in range(n)]
생전 처음 해본 코테에서 입력도 제대로 못받아서 쩔쩔맨 기억이…