์๊ฐ ๋ณต์ก๋
[์ง๊ธ ๋ฌด๋ฃ]Do it! ์๊ณ ๋ฆฌ์ฆ ์ฝ๋ฉํ ์คํธ with JAVA| ํ๋ฃจ์ฝ๋ฉ - ์ธํ๋ฐ ๊ฐ์
ํ์ฌ ํ์ 5์ ์๊ฐ์ 9092๋ช ์ธ ๊ฐ์๋ฅผ ๋ง๋๋ณด์ธ์. IT๊ธฐ์ ์ฝ๋ฉํ ์คํธ ๋๋น๋ฅผ ์ํ [์๋ฃ๊ตฌ์กฐ ๋ฐ ์๊ณ ๋ฆฌ์ฆ ํต์ฌ์ด๋ก & ๊ด๋ จ ์ค์ ๋ฌธ์ ํ์ด ๊ฐ์] ์ ๋๋ค. - JAVA ํธ - ์ฝ๋ฉํ ์คํธ(Coding Test)์ ํ์ํ
www.inflearn.com
์์ ๊ฐ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ ๋ฆฌํ์์ต๋๋ค.
์๊ฐ ๋ณต์ก๋๋?
์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ฐ์ฐ์ ํ์๋ฅผ ์๋ฏธํฉ๋๋ค.
๐ก ์ํ์๊ฐ
1์ต๋ฒ์ ์ฐ์ฐ์ 1์ด์ ์๊ฐ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค.
โก๏ธ ์ฆ, 2์ด์ ์ ํ์๊ฐ์ด ์ฃผ์ด์ง๋ค๋ฉด 2์ต๋ฒ์ ์ฐ์ฐ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํฉ๋๋ค.
์๊ฐ ๋ณต์ก๋ ์ ํ
| ์ต์ | ๋ณดํต | ์ต์ |
| ๋น ์ค๋ฉ๊ฐ ( โฆ (n) ) | ๋น ์ธํ ( θ(n) ) | ๋น ์ค ( O(n)) |
public class Main {
public static void main(String[] args) {
// 0 ~ 99์ฌ์ด์ ๋๋ค ๊ฐ
int n = (int) (Math.random() * 100);
for (int i = 0; i < 100; i++) {
if (i == n) {
System.out.print(i);
break;
}
}
}
}
n = 0์ธ ๊ฒฝ์ฐ
for๋ฌธ์ ์ค์ง 1๋ฒ๋ง ์คํ๋๋ ๋น ์ค๋ฉ๊ฐ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
n = 32, 54, 68 . . . . ์ธ ๊ฒฝ์ฐ
for๋ฌธ์ N(100๋ฒ)์ ๊ธฐ์ค์ผ๋ก ํ๊ท N/2๋ฒ ์คํํ๊ฒ ๋๋ ๋น ์ธํ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
n = 99์ธ ๊ฒฝ์ฐ
for๋ฌธ์ ๋ชจ๋ ์คํํ๊ณ ๋์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ ๋น ์ค ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
์ฝ๋ฉ ํ ์คํธ์์ ๊ณ ๋ คํด์ผํ๋ ์๊ฐ ๋ณต์ก๋๋?
์ฝ๋ฉ ํ ์คํธ์์๋ ์ ๋ ฅ ๋ฐ์ดํฐ์ ํฌ๊ธฐ(N)์ด ๋ค์ํ๊ฒ ์ฃผ์ด์ง๋๋ค.
๋ฐ๋ผ์, ์ต์ ·ํ๊ท ์ ๋ง์ถ ๋ถ์๋ณด๋ค๋ ์ต์ ์ ๊ฒฝ์ฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ๋น -์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ฐ์ฐ ํ์ ๊ณ์ฐ ๋ฐฉ๋ฒ
์ฐ์ฐ ํ์ = ์๊ณ ๋ฆฌ์ฆ ์๊ฐ ๋ณต์ก๋ X ๋ฐ์ดํฐ์ ํฌ๊ธฐ
[์์]
์๊ฐ ๋ณต์ก๋: O(N^2) , ๋ฐ์ดํฐ ํฌ๊ธฐ: 1000
โก๏ธ 1000^2์ธ 1,000,000์ ์ฐ์ฐ ํ์๊ฐ ๋์ต๋๋ค.
์๊ฐ ๋ณต์ก๋๋ฅผ ๋ฐํ์ผ๋ก ์ฝ๋ ๋ก์ง ๊ฐ์ ํ๊ธฐ
1. ์์๋ ์๊ฐ ๋ณต์ก๋ ๊ณ์ฐ์์ ์ ์ธ
O(N) ์์
public class Main {
public static void main(String[] args) {
int n = 100000;
for (int i = 0; i < n; i++) {
System.out.println(i + "๋ฒ์งธ ์ํ");
}
}
}
for๋ฌธ์ด 3๊ฐ ์กด์ฌํ๋ฉด ์๊ฐ ๋ณต์ก๋๋ O(3N)์ด์ง๋ง, ์ค์ ์คํ ์๊ฐ์ O(N)๊ณผ ํฐ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
๋ฐ๋ผ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ณ์ฐํ ๋๋ ์์๋ฅผ ์ ์ธํ๊ณ ํ๊ธฐํฉ๋๋ค.
2. ๊ฐ์ฅ ๋ง์ด ์ค์ฒฉ๋ ๋ฐ๋ณต๋ฌธ์ ์ํ ํ์๊ฐ ์๊ฐ ๋ณต์ก๋์ ๊ธฐ์ค
O(N^2)
public class Main {
public static void main(String[] args) {
int n = 100000;
int cnt = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.println("์ํ ํ์: " + cnt++);
}
}
}
}
์์ ์์์์ ์ค์ฒฉ๋ for๋ฌธ์ O(N^2)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๋จ์ผ for๋ฌธ์ด ์ฌ๋ฌ ๊ฐ ์๋๋ผ๋ ์๊ฐ ๋ณต์ก๋๋ ๋ณํ์ง ์๊ณ O(N^2) ๋ก ์ ์ง๋ฉ๋๋ค.
๋ง์ฝ 3๊ฐ์ ์ค์ฒฉ๋ for๋ฌธ์ด ์๋ค๋ฉด?
์ด์ค for๋ฌธ ์๋ฐฑ๊ฐ๋ณด๋ค 3์ค for๋ฌธ์ ์๊ฐ ๋ณต์ก๋๊ฐ ๋ ํฌ๊ธฐ ๋๋ฌธ์ ์ ์ฒด ์๊ฐ ๋ณต์ก๋๋ 3์ค for๋ฌธ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ณ์ฐ๋ฉ๋๋ค.
๋ฐ๋ผ์, ์๊ฐ ๋ณต์ก๋๋ ์ค์ฒฉ๋ for๋ฌธ์ ๊ธฐ์ค์ผ๋ก ๊ณ์ฐํด์ผ ํฉ๋๋ค.