백준을 풀다보면 의문인 점이 생긴다.
알고리즘에 따라 결과가 나와야하는데, 가끔 똑같은 알고리즘인데 코드 몇 줄 바꾼다고 결과가 달라지는 경우가 있다.
많은 사람들이 고통 받는 "시간초과"가 이에 해당한다.
만약, 시간초과가 뜨신다면 다음과 같은 방식으로 코드를 수정해보세요.
1. Python3 대신 Pypy3로 변경해서 제출하기
처음엔 Pypy3가 Python3과 다른 언어인줄 알았습니다. 뭐 사실 같은 언어는 아니죠...
Python에서 돌아가는 대부분의 코드가 pypy에서도 돌아가요. 그리고 속도는 pypy가 훨씬 빠르죠.(백준에서는 빠른게 짱이니까...)
사실 pypy3로 바꿔서 내면 시간초과 문제를 해결하는데 큰 도움이 됩니다. 하지만, 실무에서 그러면 안되겟죠?
그래서 저는 정답 유무 확인용으로 pypy3로 변경해서 제출해봅니다. 뭐 틀리면 수정하고 맞으면 왜 속도가 차이나는지, 어느부분이 속도가 느린지 파악을 해봅니다.
자세한건 아래 블로그에서 보세요
https://ralp0217.tistory.com/entry/Python3-%EC%99%80-PyPy3-%EC%B0%A8%EC%9D%B4
2. input() vs sys.stdin.readline() 비교하기
저는 python3 언어를 사용함으로 python과 pypy만 비교해볼 것입니다. 만약 C, java 등 언어도 알아보고 싶으시면 아래에 있는 출처 사이트로 이동하셔서 확인하시면 됩니다!
방법: 첫째 줄에 정수의 개수 N (= 10,000,000), 둘째 줄부터 N개의 줄에 한 개의 자연수(10,000 이하)가 적힌 파일을 입력받는데 걸리는 시간을 측정. 10번 측정해서 평균값으로 순위를 매김
- Python 3
순위 | 언어 | 입력 방법1.5408 | 평균 (초) |
1 | Python 3 | map(int,os.read(0, 100000000).decode('utf-8').split('\n')) | 4.4033 |
2 | Python 3 | int(sys.stdin.readline()) | 4.4394 |
3 | Python 3 | int(input()) | 12.4443 |
- Pypy 3
순위 | 언어 | 입력 방법 | 평균 (초) |
1 | PyPy 3 | map(int,os.read(0, 100000000).decode('utf-8').split('\n')) | 1.5408 |
2 | PyPy 3 | int(sys.stdin.readline()) | 6.6291 |
3 | PyPy 3 | int(input()) | 17.3772 |
map(int,os.read(0, 100000000).decode('utf-8').split('\n')) 이 코드는 처음보네요... 너무 복잡하기도 하고 Python에서는 시간도 큰 의미 없기에 사용 안할 거 같아요
결론
출처
https://www.acmicpc.net/blog/view/56
'알고리즘&문제' 카테고리의 다른 글
[알고리즘] Unpacking, List Comprehension, Dictionary 잘 쓰기, Sorting, Combination/Permutation, for, while문 에서의 else, Enumerate, Counter (0) | 2022.08.17 |
---|---|
[알고리즘] 자료구조 시각화 사이트 (0) | 2022.04.23 |
[백준] 백준 문제 풀기 환경 설정 & replit 사용 (0) | 2022.04.10 |
[알고리즘] 자료구조란 (0) | 2022.04.08 |