[Do it! 알고리즘 코딩 테스트] 어떤 알고리즘으로 풀어야 할까?
어떤 알고리즘으로 풀어야 할까?
알고리즘 선택의 기준이 되는 시간 복잡도
코딩 테스트의 핵심 중 하나는 문제마다 주어진 시간 복잡도를 고려해 적절한 알고리즘을 선택하는 것이다.
시간 복잡도 표기법 알아보기
알고리즘에서 시간 복잡도는 주어진 문제를 해결하기 위한 연산 횟수를 말한다. 일반적으로 C++에서는 1억 번의 연산을 1초의 수행 시간으로 예측할 수 있다.
- 시간 복잡도 표기법
- 빅-오메가(Big-Omega): 최선의 경우
- 빅-세타(Big-Theta): 평균적인 경우
- 빅-오(Big-O): 최악의 경우
코딩테스트에서는 빅-오(Big-O) 표기법을 사용한다.
시간 복잡도 활용하기
버블정렬, 병합정렬의 시간 복잡도를 각각 O(N^2), O(NlogN)이라고 표현할 때 다음과 같은 문제가 있다.
- N(1 <= N <= 1,000,000)
- 시간 제한 2초
앞서 말한 것처럼 1억 번의 연산을 1초의 수행 시간으로 예측할 수 있기에 이를 바탕으로 적합성을 평가할 수 있다.
- 버블 정렬 = (1,000,000)^2 = 1,000,000,000,000 -> 부적합
- 병합 정렬 = 1,000,000 * log(1,000,000) = 20,000,000 -> 적합
상수는 무시하면 된다. 예를 들어 1000N은 N으로 표현할 수 있다.
댓글남기기