728x90
배경
백준 Floyd-Warshall 문제를 풀다가 시간초과가 발생했다. 시간초과 발생한 것을 보고 게시판을 찾아보면서, 내 코드와 비슷하지만, 정답을 맞은 코드를 보며 알고리즘을 비교했다. 알고리즘에는 차이가 없지만 if 문과 min 함수의 차이가 눈에 띄었다. 그리고 코드를 바꿔 풀어보면서 제목과 같은 의문을 갖게 되었다.
비교 코드
import time
if __name__ == '__main__':
sim = 10**8
s = time.time()
for _ in range(sim):
if 1 > 2:
pass
res1 = time.time()-s
s = time.time()
for _ in range(sim):
max(1, 2)
res2 = time.time()-s
print('comparison : {:.2}s, max : {:.2}s'.format(res1, res2))
* 컴파일환경에 따라 차이가 더 나거나 덜 날 수 있습니다.
위와 같은 코드를 실행하면 다음과 같은 결과를 얻을 수 있다.
2개 항을 비교할 때 max함수를 $10^8$ 번 호출과 2개 항을 비교할 때 if문 $10^8$번 한 것이다.
2개의 요소를 비교
- if : 1.6s
- max : 5.9s
다음과 같이 약 3배 이상의 차이를 확인할 수 있다.
이유
if문은 단 하나의 연산자 ' > '를 통해서 직관적으로 값 비교 한 번만 하면 된다.
max 함수는 max 함수라는 이름에 대한 dictionary 조회, max 함수 호출로 인하여 시간이 오래 발생한다.
하지만 위와 같은 시간은 2개의 요소를 비교할 때 이러한 현상이 발생하지만 요소의 수가 많아지다면 max 함수가 if문보다 이점이 커질 것이다.
결론
요소가 적다면 if문을 사용하고 요소가 충분히 많다면 max 함수 또는 min과 같은 함수를 사용해야 한다.
근데 min, max함수가 훨씬 깔끔해 보이긴 하는데..
'Coding > Python' 카테고리의 다른 글
[Python] round의 사사오입과 오사오입에 대해 (0) | 2023.11.26 |
---|---|
[Python] sort, sorted 리스트 정렬 (0) | 2023.11.15 |
[Python] 맥북(Mac OS) 아나콘다(Anaconda) 설치 (0) | 2023.10.09 |
[Python] collections 모듈의 Counter 사용방법 (0) | 2023.07.30 |
[Python] deque를 list 대신 써야하는 이유가 뭘까? (0) | 2023.06.25 |