코딩 테스트

시간 복잡도와 표기법

조요피 2023. 1. 1. 15:45

시간 복잡도

알고리즘에서 시간 복잡도는 주어진 문제를 해결하기 위한 연산 횟수를 말한다.

일반적으로 수행 시간은 1억 번의 연산을 1초의 시간으로 간주하여 예측한다.

시간 복잡도 정의하기

  • 빅-오메가 : 최선일 때(Best case)의 연산 횟수를 나타낸 표기법
  • 빅-세타 : 보통일 때(Average case)의 연산 횟수를 나타낸 표기법
  • 빅-오 : 최악일 때(Worst case)의 연산 횟수를 나타낸 표기법

코딩 테스트에서는 어떤 시간 복잡도 유형을 사용해야 하나?

빅-오 표기법을 기준으로 수행 시간을 계산하는 것이 좋다.

시간 복잡도 계산

아래의 코드는 연산 횟수에서 큰 차이를 보이는 것 같지만 코딩 테스트에서 상수는 무시하기 때문에 시간 복잡도는 두 경우 모두 O(n)으로 같다.

// 연산 횟수 N
for (int i = 0; i < 100; i++) {
	...
}

// 연산 횟수 3N
for (int i = 0; i < 100; i++) {
	...
}
for (int i = 0; i < 100; i++) {
	...
}
for (int i = 0; i < 100; i++) {
	...
}

시간 복잡도는 가장 많이 중첩된 반복문을 기준으로 도출한다.

아래 코드의 연산 횟수를 N^2이다.

for 문이 10개가 더 있더라도 시간 복잡도의 변화 없이 N^2로 유지된다.

for ( int i = 0; i < 100; i++) { 
	for ( int j = 0; j < 100; j++) {
    	...
    }
}

코딩 테스트에서 시간 초과가 발생했다면 가장 많이 중첩된 반복문을 찾아서 개선해야 한다.

'코딩 테스트' 카테고리의 다른 글

탐색  (0) 2023.01.19
정렬  (0) 2023.01.17
스택과 큐  (0) 2023.01.11
배열과 리스트  (0) 2023.01.11
정렬 - Counting Sort (계수 정렬)  (0) 2020.09.10