이번 포스팅에서는 시간 복잡도에 대해 다뤄보고자 한다!
다만 깊이있게 들어가지 않고 문제를 풀 때 어떻게 생각하고 대처해야하는지 정도만 알아볼 예정이다.
시간 복잡도는 알고리즘의 성능을 나타내는 척도이다.
즉, 특정한 크기의 입력에 대하여 알고리즘의 수행 시간 분석을 분석하는 것이다.
동일한 기능을 수행하는 알고리즘이 있다면, 일반적으로 복잡도가 낮을수록 우수하다
다양한 표기법 중 빅오 표기법을 알아보자
가장 빠르게 증가하는 항만을 고려하는 표기법으로
함수의 상한(가장 빠르게 증가하는 것)만을 나타내게 된다.
예시) 연산 횟수가 인 알고리즘이 있다면 ?
• 𝑁이 증가함에 따라서, 을 제외한 다른 항의 영향력은 작아진다.
• Big-O 표기법에서는 차수가 가장 큰 항에서 계수를 제외하여 으로 표현된다.

𝑁개의 데이터의 합을 계산하는 프로그램 예제
let array = [3, 5, 1, 2, 4]; // 5개의 데이터(N = 5)
let summary = 0; // 합계를 저장할 변수
// 모든 데이터를 하나씩 확인하며 합계를 계산
for (let i = 0; i < array.length; i++) {
summary += array[i];
}
console.log(summary);
수행 시간은 데이터의 개수 𝑁에 비례함을 예측할 수 있다.
시간 복잡도:
2중 반복 문법을 이용하는 프로그램 예제
let array = [3, 5, 1, 2, 4]; // 5개의 데이터(N = 5)
for (let i = 0; i < array.length; i++) {
for (let j = 0; j < array.length; j++) {
let temp = array[i] * array[j];
console.log(temp);
}
}
시간 복잡도:
❗️주의 : 모든 2중 반복 문법의 시간 복잡도가 인 것은 아니다.
소스코드가 내부적으로 다른 함수를 호출한다면 그 함수도 고려해야 한다.
일반적인 CPU 기반의 개인 컴퓨터나 채점 목적의 컴퓨터를 고려해 보면
JavaScript를 기준으로 1억 번의 연산을 처리하기 위해 1~5초가량의 시간이 소요된다.
의 알고리즘을 설계한 경우, 𝑁의 값이 5,000이 넘는다면 최소 대략 12초 정도 걸린다.
코딩 테스트 문제에서 시간 제한은 통상 1~5초가량이다.
문제에 명시되어 있지 않은 경우 대략 5초 정도라고 생각하고 문제를 푸는 것이 합리적이다.
문제에서 가장 먼저 확인해야 하는 내용은 시간제한(수행 시간 요구사항)이다.
시간 제한이 1초인 문제를 만났을 때, 일반적인 기준은 다음과 같다.
𝑁의 범위가 500인 경우: 시간 복잡도가 인 알고리즘을 설계하면 문제를 풀 수 있다.
𝑁의 범위가 2,000인 경우: 시간 복잡도가 인 알고리즘을 설계하면 문제를 풀 수 있다.
𝑁의 범위가 100,000인 경우: 시간 복잡도가 인 알고리즘을 설계하면 문제를 풀 수 있다.
𝑁의 범위가 10,000,000인 경우: 시간 복잡도가 인 알고리즘을 설계하면 문제를 풀 수 있다.
대략적인 문제를 접했을 때 시간복잡도를 고려해서 문제를 풀 수 있는 적합한 알고리즘을 선택해야한다.
이후로부터 다양한 알고리즘들을 배우면서 해당 알고리즘에 대한 시간복잡도도 기억해 둬야한다.
다음시간에는 문제를 풀기위해 주어지는 입력과 출력에 대해 알아보자!
잘 봤습니다. 좋은 글 감사합니다.