개발자를 지망하는 사람들이 꼭 거쳐가는 사이트가 있다. 바로 '백준'이다.
백준에서는 취업에 필요한 코딩테스트를 연습할 수 있는 수 많은 알고리즘 문제를 풀어볼 수 있다.
그리고 대게 알고리즘 문제는 주어진 상황에 맞게 특정 입력값을 받고, 알맞은 값을 출력하여야 한다.
나는 바로 여기에서 큰 문제를 겪었다.
코드를 어떻게 짜야할지는 바로 떠올랐는데, 막상 코드를 적는 페이지로 들어가니 문제에서 주는 입력값을 어떻게 받아야 하는지 몰랐다.
그 동안은 이 문제를 해결하기가 귀찮아 입력을 굳이 신경 쓸 필요 없는 다른 알고리즘 사이트들을 이용해왔는데,
본격적으로 코딩테스트를 준비하다보니 백준을 이용하지 않을 수가 없었다.
그래서 이번 기회를 통해 입력에 대한 다양한 방법들을 알아보았다.
입력 (input)
입력을 위한 기본적인 함수로는 input이 있다.
input은 이용자들로 하여금 콘솔창에서 값을 입력받을 수 있도록 해주고, 보통 이렇게 입력된 값은 변수에 지정되어 사용된다.
값이 여러 개 주어질 때는 split 함수를 사용하여 해당 값들을 각각 나누어 리스트로 저장할 수 있다.
map 함수
하지만 보다시피, input을 통해 입력받는 값은 str이 기본형이다.
이 입력값들을 모두 int로 바꿔주고 싶다면, 그리고 더 나아가 입력값들을 일괄적으로 처리해주고 싶다면 map함수를 사용한다.
물론 map 함수로 가져온 값들을 list나 tuple형태로 만들수도 있다.
실제로, 많은 사람들은 input값을 map 함수를 사용해 정리하는 방식을 많이 사용한다.
그러니 map(int, input().split())) <- 이 표현은 손에 익을만큼 많이 사용해보도록 하자!
sys.stdin.readline()
추가적으로 알아두면 좋은 방법이 하나 더 있다. 바로 위에 적어놓은 sys.stdin.readline() 함수인데, sys는 파이썬 내장함수가 아니므로 import 해두고 시작하여야 한다.
두 함수는 모두 기능적 측면에서 다르지 않지만, 효율성에서 차이가 난다.
입력 받으려는 값이 매우 크다고 가정할 때, 해당 값들을 받아오는 것만으로 오랜 시간이 걸릴 수 있다.
sys.stdin.readline() 의 경우 input() 과 비교해 이러한 입력 과정에서 걸리는 시간을 줄여줄 수 있다.
또한, input의 경우 입력값이 존재하지 않을 때 수행된다면 EOFerror를 출력하지만,
sys.stdin.readline의 경우 그냥 빈 문자열을 반환해준다는 면에서 에러를 발생시킬 위험도 적다고 볼 수 있다.
실제로 다른 사람들의 코딩테스트 코드들을 읽어보면 두 방법이 혼용되어 사용되는 것을 확인할 수 있었다.
두 방법 모두 알아두고 잘 사용할 수 있도록 하자.
'언어 > Python' 카테고리의 다른 글
[Python] heapq(우선순위 큐) 사용법 (0) | 2021.09.19 |
---|---|
[Python] 집합 자료형 다루기 (0) | 2021.08.04 |
[Python] collections 모듈의 Counter 함수 (2) | 2021.04.04 |
[Python] 10진수 숫자를 2진수 숫자로 바꿔주기 (0) | 2021.02.01 |
[Python] 반복문의 제어 continue, pass, break (0) | 2021.01.08 |