코딩 테스트를 풀 때 필요에 따라 Kotlin, Python, JS를 번갈아가면서 써봤지만, 머리속 생각을 바로 코드로 옮기는 데에는 파이썬만한 언어가 없어서 거의 정착하게 되었다.
이런 결정을 할 때 신경쓰이는건 '파이썬은 느리다' 라는 평가이다. 시간 제한이 있는 문제도 있기 때문에 괄시할 수 없는 문제였다.
LeetCode에서 같은 논리구조, 다른 언어로 솔루션을 올리는 사람들의 코드를 빌려 실행시간에 정말 유의미한 차이가 있는지 알아보기로 했다. 아래는 실행시간을 측정한 결과이다.
단위 : ms | C++ | Python | Python3 | JavaScript |
Spiral Matrix IV | 5 | 12 | 38 | 60 |
Split Linked List | 4 | 26 | 41 | 57 |
Max Score | 2 | 17 | 31 | 59 |
Min Count of BitFlip | 0 | 25 | 34 | 54 |
물론 단순히 언어 뿐만 아니라 LeetCode 플랫폼에서 프로그램을 다루는 방식에 의해 실행시간이 영향을 받을 수도 있다.
실제로 Java는 항상 컴파일 타임이 0ms로 표시되었다.
이런 영향을 제외하더라도, 아래 사실은 확신할 수 있었다.
1. Python과 Python3의 실행시간은 상당한 차이를 보인다.
Python3와 Python은 두배 가까운 실행시간 차이를 보인다.
실제로 같은 문제임에도 컴파일러 종류만 바꿔서 실행시간을 넘긴 경험도 있다.
2. 인터프리터 언어는 확실히 컴파일 언어에 비해 느리다.
인터프리터 언어는 컴파일 언어와 달리 런타임에 명령을 해석한다.
전체 프로그램을 미리 기계어로 번역해놓는 컴파일 언어와 비교했을 때, 필연적으로 실행시간에 손해가 생기게 된다.
다만 이를 보완하기 위한 PyPy라는 파이썬 구현체가 있다.
자주 쓰이는 기계어를 자체적으로 캐싱해서 인터프리터 자체의 느린 속도를 개선하는 식이다.
유의미한 차이가 없길 바랬으나, 컴파일 언어에게 파이썬의 실행시간은 무참하게 패배했다.
그럼에도 파이썬이 사랑받는 이유는 개발의 병목은 주로 개발자에 의해 일어나기 때문일 것이다.
파이썬! 코딩 테스트에서는 PyPy3로, 프런트엔드에서는 PyScript로, 백엔드에서는 FastAPI로 영원히 함께하자🤓
'CS 지식 > 코딩테스트' 카테고리의 다른 글
99클럽 코테 스터디 9일차 TIL | 다단계 칫솔 판매 반례 (Python) (4) | 2024.11.06 |
---|---|
[백준 14712] 넴모넴모 (Easy) Python 솔루션 (0) | 2024.10.15 |
[LeetCode] 189. Rotate Array (in-memory) (0) | 2023.01.09 |
[LeetCode] 50. Pow(x, n) in O(log n) time (0) | 2023.01.07 |
탐색을 위한 Position Class (0) | 2023.01.06 |