코딩테스트 언어 선택에 대한 팁(C++ vs Python)

코딩테스트에는 주로 C++, 파이썬, 자바 언어가 쓰입니다. 간혹가다 자바스크립트, 스위프트, C# 등의 언어로 응시를 하는 경우도 있지만 이런 언어들은 채점 플랫폼에서 해당 언어를 지원하는지 여부를 확신할 수 없고 공부할 때에도 자료가 매우 부족합니다. 그렇기 때문에 따로 코딩테스트를 대비할 시간이 굉장히 부족한 상황에서 본인의 주력 언어가 자바스크립트, 스위프트, C# 등의 언어인 상황과 같이 정말 어쩔 수 없는 경우를 제외하면 C++, 파이썬, 자바 중에서 하나를 선택해 공부를 하는게 일반적입니다.

 

먼저 자바는 자료가 다소 부족하고, 코딩테스트에 유용한 표준 라이브러리가 부족하고, 코드가 길어진다는 단점이 있어 일반적으로는 비추천합니다. 그러나 자바 숙련도가 C++, 파이썬 숙련도에 비해 압도적으로 높은 경우라면 자바를 사용하셔도 상관은 없습니다.

 

C++, 파이썬은 각각의 장단점이 있기 때문에 이를 먼저 비교해보겠습니다.

 

1. 언어 자체의 난이도

모두가 공감하겠지만 파이썬이 C++에 비해 압도적으로 쉽습니다. 문법의 딱딱함을 제외하고서라도 C++은 unmanaged language의 특성상 포인터의 잘못된 사용, 배열 인덱스 범위 초과, Integer overflow 등의 문제를 금방 알아차리기 힘들어 초심자의 학습에 아주 큰 애로사항으로 다가옵니다. 또한 C에서 char 배열로 문자열을 다룰 때 보다야 상황이 나아졌다지만 여전히 문자열의 처리가 다소 까다롭습니다. 반면 파이썬은 다소 편하게 공부를 이어갈 수 있습니다.

 

2. 실행 속도의 차이

파이썬은 C++에 비해 상당히 느립니다. 알고리즘의 종류에 따라 다르지만 5배 정도의 차이는 기본이고 심하게는 100배 가까이 차이나기도 합니다. 물론 코딩테스트 주최자들도 언어별 속도 차이를 충분히 잘 알고 있기에 보통 언어별로 시간 제한을 다르게 둡니다. 하지만 이러한 점을 감안하더라도 파이썬은 너무 느립니다. 그렇기 때문에 만약 정해로 접근했다면 당연히 C++과 파이썬 모두 통과하겠지만(사실 놀랍게도 파이썬에서 정해조차 통과되지 않는 경우가 아주 가끔씩 있긴 합니다) 접근을 잘못해서 비효율적인 코드를 제출했을 때 C++은 통과되지만 파이썬은 통과되지 못하는 경우가 생길 수 있습니다(예시).

 

3. 자료의 양

2번에서 언급한 실행 속도의 문제로 인해 알고리즘 대회에서는 C++이 많이 쓰입니다(보통 대회에서는 언어에 따른 시간 보정을 해주지 않기 때문에 Python으로는 절대 시간 제한 내로 통과될 수 없는 경우가 종종 있습니다). 그렇기 때문에 자연스럽게 알고리즘을 잘하는 사람들은 대다수가 C++을 주력 언어로 사용합니다.

 

대회 수준까지는 전혀 관심이 없고 코딩테스트 통과만을 목표로 하면 상관없는 것이 아닌가 하고 반문할 수 있지만 상위권에서의 주력 언어가 C++인 문제로 인해 알고리즘 공부 자료를 보면 C++과 파이썬의 양과 질의 차이가 있습니다. 코딩테스트 공부를 할 때 다른 사람의 블로그 글이나 코드를 보면서 도움을 받을 일이 많습니다. 그런데 일반적으로 상위권은 C++을 많이 쓰기 때문에 이들이 작성한 자료 또한 C++을 기반으로 하는 경우가 많습니다. 그렇기 때문에 특히 고급 개념으로 갈수록 자료의 양도 C++이 많고 코드의 질 또한 상당한 차이가 있습니다. 

 

그래도 최근에는 파이썬으로 코딩테스트를 공부하려는 수요가 많아지면서 책이나 합리적인 가격의 강의가 여럿 있습니다. 제가 하나하나 살펴보지는 않았어서 어떤게 좋다고 추천은 드리기 어렵지만 그래도 책이나 강의는 저자가 책임감을 가지고 만들었을테니 것도 좋은 방법입니다. 혹시 파이썬으로 코딩테스트를 준비하고자 하는 분은 자료나 풀이를 볼 때 최대한 검증된 사람의 것을 보는걸 추천드립니다(보통 BOJ에서 자주 보이는 닉네임의 코드를 참고하면 웬만해서는 실패하지 않습니다).

 

이 3가지 장단점을 고려한 저의 결론은 아래와 같습니다.

 

1. 두 언어 모두 BOJ 브5 수준 혹은 코드업 100제 수준의 문제를 푸는 것 조차 버거울 정도로 기반이 약할 경우에는 파이썬이 쉬운 만큼 파이썬으로 시작하는걸 추천한다.

 

2. 어느 한 언어의 숙련도가 다른 언어에 비해 높다면 숙련도가 높은 언어를 택하면 된다.

 

3. 두 언어 모두 적당히 생각하는 로직을 구현할 때 어려움은 없을 정도로 알고 있다면 어느 것을 택해도 큰 상관은 없지만 실행 속도의 차이와 자료의 양을 고려했을 때 C++을 추천한다.

 

참고로 저는 C++을 주력 언어로 사용하고 문자열 처리가 복잡할 경우에 한해 Python을 보조적으로 이용합니다. Python을 주력으로 사용하실 경우 대부분의 문제는 Python으로 풀되 시간 복잡도가 애매해보이거나 연결리스트와 같이 Python에는 표준 라이브러리가 없는데 C++에는 있는 문제에 한해 C++을 보조적으로 이용하면 가장 좋습니다.

 

그리고 C언어는 알고 있지만 C++을 모른다는 이유로 PS에서 C++을 사용하기를 꺼려하는 경우를 볼 수 있는데, PS에서는 C++의 STL만 가져와서 사용할 뿐 상속, 스마트 포인터 등과 같은 C++ 고급 문법/개념은 거의 필요가 없습니다. 설령 C++을 이전에 다뤄본 적이 없다고 해도 C언어를 잘 알고 있다면 C++을 사용하는걸 추천드립니다.

 

마지막으로 코딩테스트와 별개로 장차 코딩으로 먹고 살고자 한다면 C++, Python 두 언어 모두 충분히 공부해둘 가치가 있는 언어인 만큼 짬이 날 때 꼭 두 언어 모두 익혀두시는걸 추천드립니다.

  Comments