습관처럼
python: 입출력 - 알고리즘편 본문
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) 이 안먹는다. 즉 임의로 재귀 호출 깊이를 설정할 수 없다는 것에 주의해야 한다.
'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 |