1. ์๊ฐ๋ณต์ก๋๋?
์ฝ๋ฉํ
์คํธ ๋ฌธ์ ๋ค์ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ํ ์ ์์ง๋ง,
๊ทธ ์ค '๊ฐ์ฅ ํจ์จ์ ์ผ๋ก ํด๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆ'์ด ์๋ค.
์ด๊ฒ์ ์๊ณ ๋ฆฌ์ฆ์ด ์คํ๋๋ ์ ํ ์๊ฐ๊ณผ ๊ด๋ จ์ด ์๋ค.
์๊ฐ ๋ณต์ก๋๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ๋ํ๋ด๋ ์งํ๋ก,
์
๋ ฅ ํฌ๊ธฐ์ ๋ํ ์ฐ์ฐ ํ์์ ์ํ์ด๋ค.
์๊ฐ ๋ณต์ก๋๊ฐ ๋ฎ์ ์๊ณ ๋ฆฌ์ฆ์ด ์ข์ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
*์
๋ ฅํฌ๊ธฐ = ์๊ณ ๋ฆฌ์ฆ์ด ์ฒ๋ฆฌํด์ผ ํ ๋ฐ์ดํฐ ์
2. ๋น ์ค ํ๊ธฐ๋ฒ
์ต์
์ ๊ฒฝ์ฐ ์๊ฐ ๋ณต์ก๋๋ฅผ ํํํ๋ ํ๊ธฐ๋ฒ์ '๋น
์คํ๊ธฐ๋ฒ'์ด๋ผ๊ณ ํ๋ค.
๋น
์คํ๊ธฐ๋ฒ์ ์ดํดํด์ผ๋ง ์ฝ๋ฉํ
์คํธ์์ ์ต์ ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฐพ์ ์ ์๋ค.
์ด๋ค ํ๋ก๊ทธ๋จ์ ์ฐ์ฐ ํ์๋ฅผ f(x)๋ผ๊ณ ํ ๋ ํจ์์ ์ต๊ณ ์ฐจํญ์ ๋จ๊ธฐ๊ณ ๊ณ์๋ฅผ ์ง์์ O( ) ํ์์ผ๋ก ํ๊ธฐํ๋ ๊ฒ์ด ๋น
์คํ๊ธฐ๋ฒ์ด๋ค.
์๋ฅผ ๋ค์ด ์ด๋ค ํ๋ก๊ทธ๋จ์ ์ฐ์ฐ ํ์๊ฐ
f(x) = 2xยฒ + 3x + 5 ๋ผ๋ฉด ์๊ฐ๋ณต์ก๋๋
์ต๊ณ ์ฐจํญ์ ๋ฐ๋ผ O(xยฒ)์ด๋ค.
์์ | ๋น ์ค ํ๊ธฐ๋ฒ | ์ค๋ช |
3xยฒ + 5x + 6 | O(xยฒ) | ๋คํญํจ์๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฏ๋ก ์ต๊ณ ์ฐจํญ์ธ xยฒ๋ง ๋จ์ |
x + logx | O(x) | ๋คํญํจ์ + ๋ก๊ทธํจ์๋ ์ฆ๊ฐํญ์ด ๋ ๋ฎ์ ๋ก๊ทธํจ์๊ฐ ์ฌ๋ผ์ง |
2หฃ + 10xโต + 5xยฒ | O(2หฃ) | ์ง์ํจ์๋ ๋คํญํจ์๋ณด๋ค ๋น ๋ฅด๊ฒ ์ฆ๊ฐํ๋ฏ๋ก ์ง์ํจ์๋ง ๋จ์ |
5xยฒ - 5x | O(xยฒ) | ์ต๊ณ ์ฐจํญ xยฒ๋ง ๋จ์ |
public static void main(String[] args) {
solution(6);
}
public static void solution(int n) {
int count = 0;
for (int i = 0; i < n; i++) { // N^2 ์ฐ์ฐ
for (int j = 0; j < n; j++) {
count++;
}
}
for (int i = 0; i < n; i++) { // N ์ฐ์ฐ
count++;
}
for (int i = 0; i < n * 2; i++) { // N*2 ์ฐ์ฐ
count++;
}
for ( int i = 0; i < 5; i++) { // 5 ์ฐ์ฐ
count++;
}
System.out.println(count);
}
์ ์ฝ๋์์ solution() ํจ์๋ n^2๋ฒ, n๋ฒ, 2n๋ฒ, 5๋ฒ์ ์ฆ๊ฐ ์ฐ์ฐ์ ํ๊ณ , ๊ฒฐ๊ณผ๊ฐ count๋ ์ฐ์ฐ ํ์์ด๋ค.
6^2 + 6 + 2*6 + 5 ๋ฅผ ํ๋ฉด ์ฐ์ฐํ์๋ 59์ด๋ค.
์ด๊ฒ์ ์์ผ๋ก ํํํ๋ฉด n = x์ผ ๋, f(x) = x^2 + 3x + 5 ์ด๊ณ ,
์๊ฐ๋ณต์ก๋๋ ์ต๊ณ ์ฐจํญ์ O(x^2)์ด๋ค.
3. ์๊ฐ๋ณต์ก๋ ๊ณ์ฐ
์ฝ๋ฉํ
์คํธ์์๋ ์ ํ ์๊ฐ์ด ์๋๋ฐ, ๋น
์คํ๊ธฐ๋ฒ์ ํตํด ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ ์จ์ผ ํด๋น ์๊ฐ ์์ ์ถ๋ ฅํ ์ ์์ ์ง ์์ธกํ ์ ์๋ค. ๋น
์คํ๊ธฐ๋ฒ์ ํ์ฉํ์ง ์๊ณ , ์กฐ๊ฑด์ ๋ง์ง ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์ง๋ฉด ๋ฐํ์์๋ฌ๋ก ์๊ฐ์ ๋ญ๋นํ ์ ์๋ค.
์ปดํจํฐ๊ฐ 1์ด๋น ์ฐ์ฐํ ์ ์๋ ์ต๋ ํ์๋ 1์ต๋ฒ์ด๋ค.
1s = 100,000,000 ํ
ํ์ง๋ง ์ฑ์ ์๊ฐ์ ์ถฉ๋ถํ ์ฌ์ ์๊ฒ ์ง์ ํ๊ธฐ ์ํด ์ฐ์ฐ ํ์๋ฅผ 3๋ถ์ 1๋ก ์ค์ฌ 1000๋ง ~ 3000๋ง ์ ๋๋ก ์๊ฐํด์ ์๊ฐ๋ณต์ก๋๋ฅผ ํ๋จํ๋ฉด ๊ฐ์ฅ ์ข๋ค. ์ฆ, ์ ํ ์๊ฐ์ด 1์ด์ธ ๋ฌธ์ ๋ ์ฐ์ฐํ์๊ฐ 3,000๋ง์ด ๋๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด ์ ๋๋ค.
N์ ๊ฐ์ฉ ๋ฒ์
์๊ฐ๋ณต์ก๋ | N์ ๊ฐ์ฉ ๋ฒ์ |
O(N!) | 10 |
O(2^n) | 20~25 |
O(N^3) | 200~300 |
O(N^2) | 3,000~5,000 |
O(NlogN) | 100๋ง |
O(N) | 1,000~2,000๋ง |
O(logN) | 10์ต |
์๋ฅผ ๋ค์ด, ๋ฐฐ์ด์ ์์๋ค์ ํ๋ ํ๋ ์ง์ด๊ฐ๋ฉด์ ์ํํ๋ ๋ฐฉ์์ ์๊ฐ ๋ณต์ก๋๊ฐ O(N)์ด๋ค. O(N)์ด ํ์ฉํ๋ ์ฐ์ฐ ํ์๋ 2,000๋ง์ด๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ์ ๊ฐ์๊ฐ 2,000๋ง ๊ฐ ์ดํ์ด๋ฉด ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ฐ์์ผ๋ก ๋ถํ์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ธํ๊ณ ์ฝ๋๋ฅผ ์ง๋ฉด ๋๋ค.
์๊ฐ ๋ณต์ก๋ ์ฐธ๊ณ ๊ธฐ์ค
1. ๋ฌธ์ ์ ์
2. ์ฐ์ฐํ์ ์ธก์
3. ์๊ฐ๋ณต์ก๋ ๋ถ์
๋ณ์ฐ๊ธฐ
์ฐ๋ฆฌ๊ฐ ์ด์คfor๋ฌธ์ผ๋ก ์ ์๊ณ ์๋ ๋ณ์ฐ๊ธฐ์ ์ฐ์ฐํ์๋ฅผ ๊ณ์ฐ ํด ๋ณด์.
1๋ฒ์งธ ์ค์ 1๋ฒ ์ฐ์ฐ, 2๋ฒ์งธ ์ค์ 2๋ฒ ์ฐ์ฐ, ... N๋ฒ์งธ ์ค์ N๋ฒ ์ฐ์ฐํ๋ค.
๋ฐ๋ผ์ ์ฐ์ฐํ์ f(N)์ ๋น
์คํ๊ธฐ๋ฒ์ผ๋ก O(N^2)์ด๋ค.
๋ฐํ ๋ฆฌ์ ์๋ช ๋ฌธ์
์ด๊ธฐ ๋ฐํ
๋ฆฌ์ ์ธํฌ ๊ฐ์๊ฐ N์ผ ๋ ํด๋ง๋ค ์ธํฌ ๊ฐ์๊ฐ ์ด์ ์ธํฌ ๊ฐ์์ ๋ฐ์ผ๋ก ์ค๋ค๋ฉด ์ธ์ ๋ชจ๋ ๋ฐํ
๋ฆฌ์๊ฐ ์ฃฝ์์ง ๊ณ์ฐํด์ผ ํ๋ค. ์
์ถ๋ ฅ ์๋ฅผ ํ๋ฅผ ํตํด ์ดํด ๋ณด์.
์๋ฅผ ๋ค์ด N์ด 16์ธ ๊ฒฝ์ฐ, ๋ชจ๋ ๋ฐํ
๋ฆฌ์๋ 5๋
์ด๋ฉด ์๋ฉธํ๋ค.
ํ์ฌ ๋ฐํ
๋ฆฌ์์ ์๊ฐ N์ด๋ผ๋ฉด 1๋
๋ค์ ๋ฐํ
๋ฆฌ์ ์๋ ยฝN์ด๋ค.
Y๋
ํ์ ๋ฐํ
๋ฆฌ์์ ์๋ (ยฝ)YN์ด๋ค.
๊ทธ๋ฌ๋ฉด ๋ฐํ
๋ฆฌ์์ ์๋ฉธ ์๊ธฐ๋ (ยฝ)YN์ ๊ฐ์ด ์ต์ด๋ก 1๋ณด๋ค ์์์ง ๋์ด๋ค.
์ฆ, (ยฝ)YN <= 1์ธ Y๋ฅผ ์ฐพ์ผ๋ฉด ๋๋ค.
์ด ๊ณ์ฐ ๊ณผ์ ์ผ๋ก ์ด ์๊ณ ๋ฆฌ์ฆ์ O(logN)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
4. ์ฝ๋ฉํ ์คํธ ๋ฌธ์ ์ ํ๋ณ ์๊ณ ๋ฆฌ์ฆ
1. ์์ ํ์ (Brute Force)
- ํน์ง: ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์๋ํ๋ ๋ฐฉ์์ ๋๋ค.
- ์๊ฐ ๋ณต์ก๋: O(n^k) ๋๋ O(2^n) ํํ๊ฐ ๋ง์ต๋๋ค.
- ์: ๋ฐฐ์ด์์ ๋ ์๋ฅผ ๋ํด์ ๋ชฉํ๊ฐ์ ์ฐพ๋ ๋ฌธ์ ์์๋ ๋ ๊ฐ์ ์ด์ค ๋ฐ๋ณต๋ฌธ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ O(n^2)๊ฐ ๋ฉ๋๋ค.
- ์ ์ฉ: ์ ๋ ฅ ํฌ๊ธฐ๊ฐ ์๊ฑฐ๋ ์ต๋ ๋ช๋ฐฑ ~ ๋ช์ฒ ์์ค์ผ ๋ ์ ํฉํฉ๋๋ค.
- ์์ ๋ฌธ์ : ์์ด, ์กฐํฉ์ ์ฌ์ฉํ ๊ฒฝ์ฐ์ ์ ๊ณ์ฐ.
2. ์ ๋ ฌ (Sorting)
- ํน์ง: ์ ๋ ฌ์ ํตํด ๋ฌธ์ ๋ฅผ ๋จ์ํํ๊ฑฐ๋, ์ดํ ์์ ์ ์ฝ๊ฒ ํฉ๋๋ค.
- ์๊ฐ ๋ณต์ก๋: ์ผ๋ฐ์ ์ผ๋ก O(n log n) (ํต ์ ๋ ฌ, ํฉ๋ณ ์ ๋ ฌ, ํ ์ ๋ ฌ ๋ฑ).
- ์ ์ฉ: ์ ๋ ฅ ํฌ๊ธฐ๊ฐ 10^6 ์ ๋์ผ ๋๋ ์ ํจํฉ๋๋ค.
- ์์ ๋ฌธ์ : ์ ๋ ฌ ํ ์ด์ํ ์์ ๋น๊ต, ํน์ ๊ธฐ์ค์ ๋ฐ๋ผ ์ ๋ ฌ ํ ์ต๋๊ฐ, ์ต์๊ฐ ์ฐพ๊ธฐ.
3. ์ด๋ถ ํ์ (Binary Search)
- ํน์ง: ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ํน์ ๊ฐ์ ์ฐพ์ ๋ ์ ๋ฐ์ฉ ํ์ํ๋ ๋ฐฉ์์ ๋๋ค.
- ์๊ฐ ๋ณต์ก๋: O(log n).
- ์ ์ฉ: ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ด ์๊ฑฐ๋, ์ ๋ ฌ์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ.
- ์์ ๋ฌธ์ : ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ํน์ ์์์ ์์น ์ฐพ๊ธฐ, ๋ฒ์๋ฅผ ์ขํ๊ฐ๋ฉฐ ์ต์ ํํ๋ ๋ฌธ์ .
4. ํฌ ํฌ์ธํฐ (Two Pointers) ๋ฐ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ (Sliding Window)
- ํน์ง: ๋ฐฐ์ด์ด๋ ๋ฆฌ์คํธ์์ ๋ ๊ฐ์ ํฌ์ธํฐ(์ธ๋ฑ์ค)๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ ์กฐ๊ฑด์ ์ฐพ์ต๋๋ค.
- ์๊ฐ ๋ณต์ก๋: ์ผ๋ฐ์ ์ผ๋ก O(n).
- ์ ์ฉ: ์ ๋ ฌ๋ ๋ฐฐ์ด์ด๋ ๋ฆฌ์คํธ์์ ํน์ ํฉ์ ๊ตฌํ ๋, ๋ถ๋ถ ๋ฐฐ์ด์ ์ต์ ํ๋ ํฉ์ ์ฐพ์ ๋ ๋ฑ.
- ์์ ๋ฌธ์ : ํน์ ํฉ์ด ๋๋ ๋ ์ ์ฐพ๊ธฐ, ์ฐ์๋ ๋ถ๋ถ ์์ด์ ํฉ ์ฐพ๊ธฐ.
5. ํด์ ๋งต / ๋์ ๋๋ฆฌ (Hash Map / Dictionary)
- ํน์ง: ํค-๊ฐ ์์ ์ ์ฅํ๊ณ , ๊ฒ์๊ณผ ์ฝ์ ์ ํ๊ท O(1) ์๊ฐ์ ์ํํฉ๋๋ค.
- ์๊ฐ ๋ณต์ก๋: ํ๊ท O(1), ์ต์ ์ ๊ฒฝ์ฐ O(n) (ํด์ ์ถฉ๋ ๋ฐ์ ์).
- ์ ์ฉ: ๋น๋ ์ ๊ณ์ฐ, ํน์ ํค ์กด์ฌ ์ฌ๋ถ ํ์ธ ๋ฑ.
- ์์ ๋ฌธ์ : ๋ฐฐ์ด ๋ด ์ค๋ณต ์์ ์ฐพ๊ธฐ, ์ฃผ์ด์ง ๊ฐ์ ๋น๋ ์ฐพ๊ธฐ.
6. ๊ทธ๋ํ ํ์ (DFS / BFS)
- ํน์ง: ๊น์ด ์ฐ์ ํ์(DFS)๊ณผ ๋๋น ์ฐ์ ํ์(BFS)๋ฅผ ํตํด ๊ทธ๋ํ์ ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํฉ๋๋ค.
- ์๊ฐ ๋ณต์ก๋: O(V + E) (๋ ธ๋ ์ V์ ๊ฐ์ ์ E์ ํฉ).
- ์ ์ฉ: ๊ทธ๋ํ๋ ํธ๋ฆฌ ๊ตฌ์กฐ์์ ๊ฒฝ๋ก ์ฐพ๊ธฐ, ์ฐ๊ฒฐ ์์ ์ฐพ๊ธฐ.
- ์์ ๋ฌธ์ : ๋ฏธ๋ก ํ์, ์ฌ์ ๊ฐ์ ์ธ๊ธฐ, ์ต๋จ ๊ฒฝ๋ก ์ฐพ๊ธฐ.
7. ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (Dynamic Programming)
- ํน์ง: ํฐ ๋ฌธ์ ๋ฅผ ์์ ํ์ ๋ฌธ์ ๋ก ๋๋์ด ํด๊ฒฐํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ์ฌ ์ค๋ณต ๊ณ์ฐ์ ํผํฉ๋๋ค.
- ์๊ฐ ๋ณต์ก๋: ๋ฌธ์ ์ ๋ฐ๋ผ ๋ค๋ฅด๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก O(n) ๋๋ O(n^2) ์ ๋.
- ์ ์ฉ: ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ์ ์ค๋ณต ๋ถ๋ถ ๋ฌธ์ ์ ์ฑ์ง์ ๊ฐ์ง ๋ฌธ์ .
- ์์ ๋ฌธ์ : ํผ๋ณด๋์น ์์ด, ์ต๋ ๋ถ๋ถ ์์ด ํฉ, ์ต์ ๋น์ฉ ๊ฒฝ๋ก.
8. ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ (Greedy Algorithm)
- ํน์ง: ๋งค ๋จ๊ณ์์ ์ต์ ์ ์ ํ์ ํ์ฌ ์ ์ฒด ์ต์ ํด๋ฅผ ๊ตฌํฉ๋๋ค.
- ์๊ฐ ๋ณต์ก๋: ๋ฌธ์ ์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก ์ ๋ ฌ(O(n log n)) ํ ์ ํํ ์ ์์ต๋๋ค.
- ์ ์ฉ: ๋งค ์ ํ์ด ์ดํ ์ ํ์ ์ํฅ์ ์ฃผ์ง ์๋ ๊ฒฝ์ฐ.
- ์์ ๋ฌธ์ : ๋์ ๊ฑฐ์ค๋ฆ๋ ๋ฌธ์ , ํ์์ค ๋ฐฐ์ , ๋ฐฐ๋ญ ๋ฌธ์ (๊ทผ์ฌ ํด๋ฒ).
9. ์กฐํฉ๋ก (Combinatorics)
- ํน์ง: ๊ฐ๋ฅํ ๋ชจ๋ ์กฐํฉ์ด๋ ์์ด์ ๊ณ์ฐํ๋ ๋ฐฉ์.
- ์๊ฐ ๋ณต์ก๋: ์กฐํฉ์ O(nCm), ์์ด์ O(nPm)๋ก ๋๊ฐ ๋งค์ฐ ํฐ ๊ฐ์ด ๋ฉ๋๋ค.
- ์ ์ฉ: ์ ํ๋ ํฌ๊ธฐ์ ์กฐํฉ์ด๋ ์์ด์ ๊ตฌํ ๋ ์ฌ์ฉ.
- ์์ ๋ฌธ์ : ๋ถ๋ถ ์งํฉ์ ํฉ ๊ตฌํ๊ธฐ, ๋ชจ๋ ๊ฐ๋ฅํ ๊ฒฝ๋ก ํ์.
10. ๋ฐฑํธ๋ํน (Backtracking)
- ํน์ง: ํด๋ฅผ ์ฐพ๋ค๊ฐ ์กฐ๊ฑด์ ๋ง์ง ์์ผ๋ฉด ๋๋์๊ฐ๋ ๋ฐฉ์์ผ๋ก ์ต์ ํด๋ฅผ ์ฐพ์ต๋๋ค.
- ์๊ฐ ๋ณต์ก๋: ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ฉฐ, ์ต์ ์ ๊ฒฝ์ฐ O(n!)์ด ๋ ์ ์์ต๋๋ค.
- ์ ์ฉ: ๋ชจ๋ ๊ฐ๋ฅ์ฑ์ ํ์ํ๋ฉด์๋, ์กฐ๊ฑด์ ๋ง์ง ์๋ ๊ฒฝ์ฐ ๊ฐ์ง์น๊ธฐ๋ฅผ ํตํด ํจ์จ์ ์ผ๋ก ํ์ํ ๋.
- ์์ ๋ฌธ์ : N-Queen ๋ฌธ์ , ๋ถ๋ถ ์งํฉ ํฉ ๋ฌธ์ , ์์ด ๋ฐ ์กฐํฉ ์์ฑ.
11. ํธ๋ฆฌ ํ์ (Tree Traversal)
- ํน์ง: ํธ๋ฆฌ์ ๊ฐ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ์ ์, ์ค์, ํ์ ์ํ ๋ฐฉ์์ด ์์ต๋๋ค.
- ์๊ฐ ๋ณต์ก๋: O(n) (๋ ธ๋ ์ n).
- ์ ์ฉ: ํธ๋ฆฌ์์ ํน์ ๊ฒฝ๋ก ์ฐพ๊ธฐ, ๋ชจ๋ ๋ ธ๋ ๋ฐฉ๋ฌธ.
- ์์ ๋ฌธ์ : ์ด์ง ํธ๋ฆฌ ๊ฒฝ๋ก ํ์, ์ด์ง ๊ฒ์ ํธ๋ฆฌ ํ์.