Python
은 좋은 언어 입니다. 코딩하기도 쉽고, 가독성도 좋죠. 하지만, 그에게 단점이 있다면, 프로그램 속도일 것입니다. C++
과 같은 컴파일 언어와 다르게, Python
은 인터프리터 언어이기 때문이죠. 하지만, 요즘 컴퓨터 속도의 발전과 함께, 기업에서 채용을 위한 코딩 테스트를 실시 할 때 Python
으로 코딩 테스트를 보게 해 주는 경우가 많아지고 있습니다. 언어 사용 능력보단 문제 해결 능력이 프로그래밍의 세계에선 더 중요하기 때문이죠.
Python도 요즘 코딩 테스트에서 "인싸" 언어라구요?
하지만, Python
으로 알고리즘을 풀기 전에 유의해야 할 것들이 있습니다. 일단 C++
로 알고리즘 문제를 풀때, cin
객체를 이용 하여 입력을 받는 것보단, scanf()
함수를 이용해서 입력을 받는게 더 빠르듯, Python
도 알고리즘 문제 해결을 위한 몇 개의 함수들이 존재 합니다. 또한, Python 3
인터프리터를 그대로 사용하는 것보다, PyPy3
라는 인터프리터를 사용하는게 더 빠른 프로그램 실행에 좋습니다.
Python
을 사용하는 많은 사람들은 input()
함수를 통해 입력을 받을 것입니다. 하지만, 우리는 이제 sys
모듈과 친해질 것 입니다. sys
모듈은 사용자와 컴퓨터, 혹은 파이썬 인터프리터와의 상호 작용들을 도와주는 함수, 변수들을 모아놓은 모듈입니다. 일단, 오늘은 알고리즘 문제를 해결하는 데 필요한 함수들만 사용 할 것입니다. 더 많은 설명들은 sys 모듈에 관한 Document를 참고해 주세요.
해당 함수는 단, 한줄을 입력 받은 후, 입력 받은 값을 가진 str
객체를 반환합니다. input()
함수와 기능이 똑같습니다. 여기서 알아 두면 좋은 것은 sys.stdin
은 file
객체와 사용 방법이 똑같습니다. 단지 입력을 인터프리터 내에서 받냐, 파일에서 받냐가 다를 뿐이죠.
int
객체를 입력 받고 싶을 때import sys
n = int(sys.stdin.readline())
import sys
arr = sys.stdin.readline().split()
입력이 '1 2 3 4 5' 면 결과는 ["1", "2", "3", "4", "5"] 가 된다.
map()
함수는 iterable
가능한 객체 내부의 모든 element
에 특정 작업을 하기 위해서 사용합니다. 특히 형변환 시의 속도가 빠릅니다. function
파라미터에 lambda
식을 넣어서 작업을 할 수도 있지만, 이는 나중에 다룰 list comprehension
이 더 빠릅니다. map()
함수는 map
객체를 반환하므로, list
객체로의 형변환을 필요로 합니다.
int
객체로의 형 변환이 필요할 때.import sys
arr = list(map(int, sys.stdin.readline().split()))
입력이 '1 2 3 4 5' 면 결과는 [1, 2, 3, 4, 5] 가 된다.
list comprehension
은 list
객체 선언부에서 for
문을 이용하여 객체를 선언하는 것입니다. lambda
식으로 처리할 데이터를 for
문 앞에 그냥 작성 하면 되죠.
import sys
arr = [int(x) * 2 + 1 for x in sys.stdin.readline().split()]
입력이 '1 2 3 4 5' 면 결과는 [3, 5, 7, 9, 11] 가 된다.
sys.stdin
이 입력에 관련된 객체라면, 그에 맞는 짝도 있어야 겠지요? sys.stdout
은 출력에 관련된 객체입니다. 사실 print()
함수를 그냥 사용해도 속도에는 큰 차이가 없어 무방하지만, 특수한 경우에는 속도 차이가 크게 나는 경우가 있기 때문에, 알아두는 게 좋습니다.
print()
와 기능은 똑같지만, 주의해야 할 점 두 가지가 있다면, 첫 번째는 str
객체로의 형변환이 필수라는 것, 두 번째는 print()
함수 처럼 자동으로 개행 해주는 것이 아닌, '/n'
을 이용한 개행을 해야 한다는 것입니다. 아래 코드의 두 번째, 세 번째 줄은 똑같은 기능을 합니다.
import sys
print(1)
sys.stdout.write(str(1) + '\n')
출력
1
1
일단 오늘은 Python
을 이용한, 데이터의 빠른 입출력에 대해서 알아 보았습니다. 다음 시간에는 Python
으로 알고리즘 문제를 해결 할 때 사용 하기 유용한 내장 모듈과 내장 함수들에 대해서 알아 보겠습니다. 다음에 뵙겠습니다!