보통 코딩테스트 문제들을 풀다보면 문제들에서 입력값을 예시로 먼저 보여준다.
근데 파이썬 초보자들이 주로 사용하는 input() 만으로는 입력받기 곤란해 보이는 입력예제들이 보인다.
예를 들어보자.
"입력값 X,Y,Z 가 주어진다. 이 세값을 합한값을 출력해라."
INPUT : 10 20 30
OUTPUT : 60
이렇게 입력을 하는 문제도 있다.
나는 백준을 처음 풀어볼때 입력받는것 부터가 문제였다. 😂
이럴때는 파이썬의 split() , map() 함수를 이용해서 입력 받을 수 있다.
map()함수는 파라미터로 두개의 인자를 받는다. 첫번째는 함수, 두번째는 리스트 이다. 입력받은 리스트 내부에 있는 모든 원소에 첫번째 파라미터에 들어간 함수를 모두 적용시켜 주는 것이다.
myli= ['1','2','3']
myli = list(map(int,myli))
print(myli)
--> [1,2,3]
split()함수는 문자열 내의 요소들을 입력받은 파라미터의 단위로 쪼개어 나눈 다음 리스트에 저장해 반환한다. 그냥 split() 을 하면 공백을 기준으로 쪼개어 반환해준다.
mystr = "Hello!"
mystr.split()
print(mystr)
--> ['H','e','l','l','o','!']
이제 이 두가지 함수를 이용해서 다음과 같이 입력 받을 수 있다.
a, b, c = map(int,input().split())
input_list = list(map(int,input().split()))
위의 방법은 입력값이 그리 많지 않을때 받는 방법이다. 입력값이 차례대로 a,b,c 에 저장된다.
아래의 방법은 입력받은 값들이 리스트에 저장되어 반환된다. 입력받는 요소의 수가 꽤 많다면 리스트로 입력받은 후 인덱스로 접근해 사용하면 된다.
또한 간혹 단순히 input()함수를 사용하면 TimeOut이 발생할때도 있다. 이럴때는 input 대신에 sys.stdin.readline 을 이용해주면 문제가 해결 될 수도 있다.
import sys
data = sys.stdin.readline()
# 이걸 위의 예제에 그대로 응용해도 좋다.
data = list(map(int,sys.stdin.readline().split()))
# 또한 다음과같이 해주면 TimeComplexity는 유리하되, 코드는 기존과 같이 편리하게 작성할 수 있다.
import syt
input = sys.stdin.readline
data = list(map(int,input().split())) # 위의 코드와 같은 내용이다.
input 과 sys.stdin.readline 은 몇가지의 차이점때문에 실행시간에 차이점이 있다.
input의 내장함수를 뜯어보면 단순히 그냥 대화형 입력에 사용되는 stdin.readline과 달리 prompt인자를 파라미터로 받을수 있고, 개행문자를 삭제하는 기능이 포함되어 있다.
자세한건 Google님에게 더 물어보자...