본문 바로가기
알고리즘

알고리즘 및 코딩테스트 언어 고민 중이다.

by algosketch 2021. 9. 19.

 얼마 전 카카오 블라인드 코딩테스트 본 후 C++ 로는 코딩테스트를 풀기 힘들다고 느꼈다. 물론 여전히 백준이나 알고리즘 대회에서는 C++ 이 최고다. 알고리즘 대회나 백준은 시간 제한이 타이트한 경우가 많아서 같은 알고리즘이라도 순수 파이썬으로는 시간초과 나는 경우가 있다. 또한 채점이 완료되는데 기다리는 시간도 길다. 특히 언어별 추가시간이 없는 경우에도 C++ 로 풀 경우 알고리즘만 맞는다면 시간초과를 볼 일이 없다.

1. C++ 의 한계

 사실 한계까지는 아니고 C++ 로도 코딩테스트 다 풀 수는 있는데 많이 불편하다. 코딩테스트 특성상 순수 알고리즘 실력보다는 구현, 실제 개발 위주로 문제를 내려고 하는 것 같다. 물론 뒷번호로 가면 알고리즘을 물어보는 문제가 나오기도 한다. 아무튼 문제 유형에 따라 유리한 언어가 다른데, 코딩테스트는 문자열 파싱과 같은 문제들이 출제되어 split, forEach, map, find 등의 메서드 및 고계함수를 사용할 수 있다면 쉽게 구현이 가능하다. C언어로 파싱한다면 아마 이름부터가 어려운 strtok 를 사용해야할 것 같다.

2. 일단 파이썬을 연습해보려 한다.

 비록 속도는 느리지만 간단한 구현 덕분에 많이 쓰이고 있는 파이썬을 연습해보려 한다. 속도는 둘째 치더라도 파이썬에 약간의 아쉬움이 있다. 함수형 언어가 아니다보니 .map(), .filter() 같은 함수가 완전(?)하지 않다. 보통 js 나 kotlin 같은 언어에서는

list.map(() => {})

와 같이 함수를 사용할 수 있다. 파이썬에서는

map(int, input().split())

과 같이 사용하는데, 개인적으로 마음에 들지 않는다. 그래서 JavaScript 를 할까 생각하기도 했다.
 안드로이드 개발자가 되고 싶어서 kotlin 으로 공부할까 생각하기도 했지만(서버도 약간 관심 있어서 java 로 해야할까 싶기도...), js 나 python 에서는 

return [a, b]

로 구현할 수 있는 것을 kotlin 에서는

return arrayListOf(a, b)

와 같이 구현해야 한다. C++ 은 아마 다음과 같이 구현해야하지 않을까...? 저거보다 짧은 코드가 떠오르긴 하지만 그게 맞는 문법인지는 모르겠다.

vector<int> v;
v = vector<int>(2);
v[0] = a; v[1] = b;
return v;

그래서 일단 파이썬을 연습하려고 하는데, 만약 기업 코딩테스트에서 kotlin 을 쓰라고 언어 제한을 둔다면 그때 가서 공부하는 걸로...