같은 결과더라도 같은 코드는 없다.
그렇기떄문에 문제에 대한 해답을 찾는 것이 가장 중요하다.
문제를 풀다보면 더 효율적인 방법과 이게 최선일까? 라는 질문을 던져봐야한다.
효율적인 방법 == 시간 복잡도 고려
입력을 나타내는 문자열 길이의 함수로서 작동하는 알고리즘을 취해 시간을 정량화 하는 것이다. 이러한 알고리즘의 시간복잡도는 주로 big-O 표기법으로 사용한다.
faster ----------------------------------------------- slower
O(1) < O(log n) < O(n) < O(n log n) < O(n^2) < O(2^n)
상수<로그<선형<다항<지수
big-O표기법 | 알고리즘 예제 |
---|---|
O(1) | 스택 push, pop |
O(log n) | 이진트리 |
O(n) | for문 |
O(n log n) | 퀵 정렬, 병합정렬, 힙정렬 |
O(n^2) | 이중 for문, 삽입정렬, 거품정렬, 선택정렬 |
O(2^n) | 피보나치 수열 |