알고리즘을 처음 시작하는 코린이들을 위한 시간복잡도 이야기 🕰️
안녕하세요! 알고리즘에 갓 입문한 코린이 여러분!
오늘은 저와 같은 코린이 분들을 위해 시간복잡도를 조금이라도 쉽게 이해하실 수 있도록 최대한 간단히 이야기해 보려고 합니다. 참고로 저는 “Do it! 알고리즘 코딩테스트 with Java” 책을 기반으로 공부하고 있어요.
시간복잡도에서 핵심은 빅-O 표기법이기 때문에, 빅-O 표기법을 중심으로 살펴보겠습니다! 😊
시간복잡도, 그게 뭔데?
시간복잡도는 주어진 문제를 해결하기 위해 프로그램이 실행해야 하는 연산의 횟수를 의미해요. 수행 시간은 1억 번의 연산을 1초의 시간으로 간주하여 예측합니다.
하지만 처음 들으면 조금 추상적으로 느껴질 수 있어요. 그래서 더 쉽게 풀어볼게요! 😊
수행시간, 이렇게 생각해보세요!
예를 들어, 문제에서 시간 제한이 2초라고 한다면, 여러분의 프로그램은 2억 번 이하의 연산으로 문제를 해결해야 합니다.

빅-O 표기법이란?
최악일 때(worst case)의 연산 횟수를 나타낸 표기법입니다.
쉽게 말해, 입력 데이터가 엄청 커졌을 때, 가장 오래 걸리는 상황을 기준으로 알고리즘의 성능을 평가하는 도구입니다.

🤔 음.. 표로 보니까 더 이해하기 힘든 것 같은 기분은 저만 그런 걸까요?? 이해하기 쉽도록 문제 예시로 알아봅시다.

문제 예시로 이해하는 빅-O 표기법
✏️ N=100 일 때, 빅-O 표기법 정리

N = 100 일때, O(log100) 의 값이 6 ~ 7 사이의 값이라는 것을 볼 수 있습니다.
- O(logn) = 6.64
- O(n) = 100
- O(nlogn) = 100 x 6.64 = 664
- O(n^2) = 10,000
- O(2^n) = 생략
- O(n!) = 생략
실전! 문제로 보는 시간 복잡도 (백준 2750번)


N = 1,000일 때 시간복잡도 분석 🕒
문제에서 시간제한은 1초이므로 1억 번 이하의 연산 횟수로 문제를 해결해야 합니다. 이를 기준으로 O(N²)와 O(2^n)을 비교해 봅시다.
1️⃣ O(N²) 계산
1,000 x 1,000 = 1,000,000
1,000,000 < 1억 이므로 적합 알고리즘으로 볼 수 있습니다. ⭕
2️⃣ O(2^n) 계산
2^1,000의 값은 1억을 넘어서는 수준이 아니라, 실질적으로 계산이 불가능한 값입니다.
따라서 부적합한 알고리즘으로 볼 수 있습니다. ❌
결론! 빅-O, 이렇게 이해하면 쉽다! 🎉
빅-O는 복잡한 수학적 표기가 아니라, "얼마나 많은 연산을 해야 할까?"를 나타낸 척도라고 생각하면 됩니다.
이해가 조금 더 쉬워졌길 바라며 파이팅입니다! 😊
'해피 코딩 > 알고리즘' 카테고리의 다른 글
[백준 1929] 문제로 이해하는 에라토스테니스의 체 JAVA (0) | 2024.12.16 |
---|---|
[이론] 병합 정렬 알고가기 (0) | 2024.12.12 |
[이론] 버블 정렬 알고가기 (3) | 2024.12.05 |
[백준 2018] 문제로 이해하는 투 포인터 JAVA (2) | 2024.12.05 |
[이론] 구간 합, 합 배열 구하기 (2) | 2024.12.05 |