2021. 1. 22. 22:55ㆍ코딩
파이썬으로 코딩을 하다 보면 답답할 때가 있다. 파이썬이라는 언어는 다른 언어들에 비하면 많이 느리다... 그래서 보통 게임은 C언어나 C#, C++로 코딩이 많이 된다. 이렇다 보니 백준, 코드업 같은 사이트에서 타임 아웃이 자주 난다. 나는 분명 for문 3개정도 밖에 안썻는데 시간초과가 나는 경우도 있다... C는 보면 컴파일러가 따로 있다. 컴파일러는 컴퓨터가 실행 가능한 파일을 미리 만들어놓는다고 생각하면 된다. 그래서 C같은 경우는 코드를 수정하고 컴파일러를 돌려야 한다. 하지만 파이썬은 한줄 한줄 문장을 해석하기 때문에 컴파일 돌리는것이 필요 없지만, 느리다!
1. 먼저 PyPy3로 돌려본다 (만약 PyPy3가 있다면) - 속도가 조금 더 빠를 수 있다. PyPy3는 파이썬으로 만든 거지만, 속도가 빠르고, 파이썬과 문법이 동일하여서 파이썬 코드에서 그냥 언어만 PyPy3로 바꾸면 된다!
2. 입력받을때 sys모듈의 sys.stdin.readline()함수를 사용하자! 요놈은 그냥 받는것보다 2배? 정도 빠르다.
import sys
for i in sys.stdin.readline():
print(i)
이렇게 하면 값이
input : 12 3 45
output :
1
2
3
4
5
이렇게 나온다. 띄어쓰기(\n)도 받아오기 때문에 조심해야 한다.
그래서
import sys
for l in sys.stdin:
print(l)
이렇게 받으면
input : 123 456
output : 123 456
이렇게 한 줄을 고대로 받을 수 있다.
여기서 str.split() 응용을 해서
import sys
for l in sys.stdin:
print(l.split())
이렇게 받으면
input : 123 456
output : ['123', '456']
이렇게 받을 수 있다. 이렇게 하면 시간을 조금이라도 줄이는데 도움이 된다.
3. 최대한 반복문을 줄여보자. 반복문이 여러번 반복하면 시간이 오래 걸리니 최대한 반복횟수를 줄이는 방향으로 코드를 수정하자.
4. 재귀함수를 쓰는 경우에는 메모이제이션 기법을 사용하자. 이것을 사용하면 시간을 줄일 수 있다.
동적계획법 소개
1. 피보나치 수 2. 수학적 귀납법과 비둘기 집의 원리 3. 메모이제이션과 동적계획법 1. 피보나치 수 > 현재 항의 값은 전항과 전전항의 합이다. > f(n+2) = f(n) + f(n+1) - 레오나르도 피보나치가 연구한
ohdowon064.tistory.com
여기에서 메모이제이션 기법을 참고해서 시도해보면 좋을 것 같다.
5. 이렇게 했는데 진짜 안될때는 처음부터 코드를 갈아엎자. 이렇게 노력했는데 안되는 코드는 태생이 잘못된 거일수도 있다. 미련을 접고 다른 풀이방법을 찾아보자.
오늘은 파이썬에서 시간초과가 날때 어떻게 하는지 알아봤다. 이 글을 참고해서 시간초과과 난것을 해결했으면 좋겠다.
+) 추가로 3.11 베타 버전에서는 속도가 60%가량 빨라졌다고 하니 기대해보자.
https://zdnet.co.kr/view/?no=20220519171652
'코딩' 카테고리의 다른 글
| [백준] 18406번 럭키 스트레이트 (0) | 2021.01.24 |
|---|---|
| [백준] 10599번 페르시아의 왕들 (0) | 2021.01.23 |
| [백준] 1712번 손익분기점 (0) | 2021.01.20 |
| [백준] 1475번 방 번호 (0) | 2021.01.02 |
| [백준] 7735번 회사에 있는 사람 (0) | 2021.01.02 |