습관처럼

python: 입출력 - 알고리즘편 본문

Language/python

python: 입출력 - 알고리즘편

dev.wookii 2020. 1. 20. 15:42

1. input() 말고 sys.stdin.readline() 를 사용하자.


입출력 속도에서 많은 차이가 발생합니다.

sys.stdin.readline() > raw_input() > input()

input() 으로 코드를 제출할 시, 시간초과가 발생하지만, sys.stdin.readline() 으로 제출할 시 정답이 된다는 점입니다.

직접 실행해보면서 테스트 해보시길 바랍니다. 

a = [int(x) for x in input().split()] 
# a = [1, 2, 3, 4 ,5]

 

import sys 
a = map(int, sys.stdin.readline()) # a = [1, 2, 3, 4, 5]
import sys n = input() 
a = [sys.stdin.readline() for i in range(n)] 
# a = ["1 2 3", "4 5 6"]

 

2. 재귀함수가 있는 경우, 최대 재귀 깊이를 설정해줘야 한다.


 

자주 접하는 DFS,BFS에 자주 사용된다.

파이썬의 재귀 허용 깊이의 기본치가 c 보다 약한건지, c 로 짠 DFS, BFS의 경우 문제 없이 돌아가지만,

파이썬으로 돌리면 런타임 오류가 뜨는 경우가 있다. 그래서 다음과 같이 재귀 허용 깊이를 수동으로 늘려주는 코드를, 코드 상단에 적어줘야 한다.

import sys 
sys.setrecursionlimit(10**8) # 10^8 까지 늘림.


3.pypy vs Python


PyPy 가 뭔지 찾아보니, 쉽게말해 파이썬 보다 몇 배 더 빠른 개선된 파이썬이라고 생각하면 된다.

좀 더 자세히 말하면, Python3 는 내부적으로는 C로 짜여져있는데, 이를 C가 아니라 Python으로 다시 짠 것이다.

때문에, 일반적으로 Python3 보다 PyPy로 제출해서 내는게 더 안전한 듯 하다. (빠르다는 의미에서)

한편, PyPy에서는 sys.setrecursionlimit(10**8) 이 안먹는다. 즉 임의로 재귀 호출 깊이를 설정할 수 없다는 것에 주의해야 한다.



출처: https://dailyheumsi.tistory.com/32 

'Language > python' 카테고리의 다른 글

Python: _(언더바) - 알고리즘편  (0) 2020.01.19
python - 정규식을 이용한 문자열 검색  (0) 2019.12.22
python - regex(정규표현식)  (0) 2019.12.22
python - string(2)  (0) 2019.12.22
python - string(1)  (0) 2019.12.22