์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Flex
- ์๋ฐ์คํฌ๋ฆฝํธ
- REACT
- ์ฝ๋ฉํ ์คํธ
- position
- ๋ฐ๋ธ์ฝ์ค
- history api
- Props
- useRef
- ๋ฐ๋ธ์ฝ์ค3๊ธฐ
- ์๊ณ ๋ฆฌ์ฆ
- ๋ธ๋ก๊ทธ
- ํ๋ก๊ทธ๋๋จธ์ค
- useEffect
- fetch API
- Gatsby
- CSS
- float
- ํ๋ก ํธ์๋
- Today
- Total
Daehyunii's Dev-blog
01 ๋น ์ค ํ๊ธฐ๋ฒ(Big O) ๋ณธ๋ฌธ
01 ๋น ์ค ํ๊ธฐ๋ฒ(Big O)
Daehyunii 2022. 8. 1. 19:511.1 ๋น ์ค ํ๊ธฐ๋ฒ์ ํ์์ฑ
๋์ผํ ๋์์ ๊ตฌํํ๊ธฐ ์ํ ์ฝ๋๋ ์๋ง์ ๋ฐฉ๋ฒ์ผ๋ก ์์ฑ์ด ๊ฐ๋ฅํ๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด ๋ง์ ์ฝ๋๋ค ์ค์์ ์ํฉ์ ์๋ง๋ ์ฑ๋ฅ์ด ๊ฐ์ฅ ์ข์ ์ฝ๋๋ ๋ฌด์์ธ์ง๋ฅผ ํ์ธํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด ๋น ์ค ํ๊ธฐ๋ฒ์ด๋ค. ๋์ผํ ๋์์ ๊ตฌํํ๊ธฐ ์ํ ์ฌ๋ฌ ์ฝ๋ ์์ฑ ๋ฐฉ๋ฒ์ ๊ทธ ์์ฑ ๋ฐฉ๋ฒ๋ง๋ค ์ฅ๋จ์ ์ ๊ฐ์ง๊ณ ์๋ค. ํ์ง๋ง ๊ฐ๋ฐ์๋ ์ด๋ฅผ ๋น๊ตํด๋ณด๊ณ ํ์ธํ๋๊ฒ์ด ์ค์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ฒ๊ทธ์ ์ฝ๋๋ฅผ ๋๋ฆฌ๊ฒ ๋ง๋๋ ๊ฒ์ด ๋ฌด์์ธ์ง ์ดํดํ๋๊ฒ๋ ๊ต์ฅํ ์ค์ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋น ์ค ํ๊ธฐ๋ฒ์ด ํ์ํ๋ค.
1.2 ์ฝ๋ ์๊ฐ ์ฌ๊ธฐ
์ฝ๋๋ฅผ ์์ฑํจ์ ์์ด์ ๋ ์ข์ ์ฝ๋๋ฅผ ํ๋จํ๋ ๊ธฐ์ค์ ๋ฌด์์ผ๊น? ์ฒ๋ฆฌ ์๋๊ฐ ์ผ๋ง๋ ๋น ๋ฅธ์ง? ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ผ๋ง๋ ์ฌ์ฉ๋๊ณ ์๋์ง? ์๋๋ฉด ๊ฐ๋ ์ฑ์ด ์ข์ ์ข์ ์ฝ๋? ์ด ์ฒ๋ผ ์ข์ ์ฝ๋๋ฅผ ํ๊ฐํ๋ ๊ธฐ์ค์ ๋งค์ฐ ๋ค๋ฅผ ์ ์๋ค. ์ฐ์ ์๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ข์ ์ฝ๋๋ฅผ ํ๋ณํด ๋ณด๋ ค๊ณ ํ๋ค.
//์ซ์ 1๋ถํฐ ํน์ ํ n์ซ์ ์ฌ์ด์ ์๋ ๋ชจ๋ ์ซ์๋ค์ ๋ํ๋ ํจ์์์ฑ
// 1๋ฒ ์์
function addUpTo(n) {
let total = 0;
for (let i = 1; i <= n; i++) {
total += i;
}
return total;
}
console.log(addUpTo(10));
//ํจ์ ์ฒ๋ฆฌ ์๊ฐ์ด ์ฝ 1.2์ด ๊ฑธ๋ฆผ
var t1 = performance.now();
addUpTo(1000000000);
var t2 = performance.now();
console.log(`Time Elapsed: ${(t2 - t1) / 1000} seconds.`)
//2๋ฒ ์์
function addUpTo(n) {
return n * (n + 1) / 2;
}
//ํจ์ ์ฒ๋ฆฌ ์๊ฐ์ด ์ฝ 0.0001์ด ๊ฑธ๋ฆผ
var time1 = performance.now();
addUpTo(1000000000);
var time2 = performance.now();
console.log(`Time Elapsed: ${(time2 - time1) / 1000} seconds.`)
//ํ์ง๋ง ์ด๋ ๊ฒ ํ๋ ํ๋ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋ฉ์๋๋ก ํ์ธํ๋๊ฒ์ ๊ต์ฅํ ๋นํจ์จ์ ์ธ ์ผ์
์ ์์ 1๋ฒ ์ฝ๋๋ ๋ฐ๋ณต๋ฌธ์ ํตํด์ ํจ์๋ฅผ ์์ฑํ๊ณ , ์์ 2๋ฒ์ ์ํ ๊ณต์์ ์ฌ์ฉํด์ ํจ์๋ฅผ ์์ฑํ ํ, ์ฒ๋ฆฌ๋๋ ์๊ฐ์ ํจ์๋ณ๋ก ๋ฉ์๋๋ฅผ ํตํด ๋น๊ตํด ๋ณธ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ์ค์ํ๊ฒ์ ์ด๋ป๊ฒ ์์ฑํ ํจ์๊ฐ ๋ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ๋๋๋๊ฐ ์๋๋ค. ๋ฌผ๋ก 2๋ฒ ์์ ๊ฐ ๋ ๋น ๋ฅด๊ณ ๊ฒฐ๊ตญ ๋น ๋ฅด๊ธฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณธ๋ค๋ฉด ์ข์ ์ฝ๋์ผ ๊ฒ์ด๋ค. ๊ทธ์น๋ง ์ฌ๊ธฐ์ ์ค์ํ๊ฒ์ ์์ ์ฝ๋๋ค์ฒ๋ผ ํ๋ํ๋ ๋ฉ์๋๋ค์ ํตํด์ ๋น๊ตํ๋๊ฒ์ ๊ต์ฅํ ๋นํจ์จ์ ์ด๋ผ๋ ๊ฒ์ด๋ค. ์๋ฅผ๋ค์ด ๊ทน๋จ์ ์ด์ง๋ง ์ฒ๋ฆฌํ๋๋ฐ 1์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ์ฝ๋์ 4์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ์ฝ๋ ์ค ๋๊ฐ ๋ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ๋๋์ง๋ฅผ ๋น๊ตํ๊ธฐ ์ํด์๋ ์๊ฐ์ด ๋๋ฌด ๋ง์ด๋ค๊ณ , ๋ฐ๋๋ก ์ฒ๋ฆฌ๊ฐ ๋๋ฌด ๋นจ๋ผ ๋น๊ต๊ฐ ํ๋ ๊ฒฝ์ฐ๋ ์์ ์ ์๋ค. ๋ ์ปดํจํฐ ์ฑ๋ฅ๋ณ๋ก๋ ์ฐจ์ด ๋ฑ ๋ง์ ๋ณ์๋ค์ด ์์ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๊ธฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ํฉ์ ์ ํฉํ ์ข์ ์ฝ๋๋ฅผ ํ๋ณํ๊ธฐ๋ ์ด๋ ต๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋น ์ค ํ๊ธฐ๋ฒ์ด ํ์ํ ๊ฒ์ด๋ค.
1.3 ์ฐ์ฐ ๊ฐ์ ์ธ๊ธฐ
๋ฐ๋ก ์์์ ์ดํด๋ณธ๋ฐ์ ๊ฐ์ด ์๊ฐ์ผ๋ก ์ฝ๋๋ฅผ ๋น๊ตํ๋๊ฒ์ ๋ฌธ์ ๊ฐ ์๋ค. '๊ทธ๋ ๋ค๋ฉด ๋ญ๊ฐ ์ข์๊น?' ๋ฐ๋ก ์ฐ์ฐ ๊ฐ์๋ฅผ ์ธ๋ ๋ฐฉ๋ฒ์ด๋ค.
//1๋ฒ ์์
function addUpTo(n) {
return n * (n + 1) / 2;
}
//2๋ฒ ์์
function addUpTo(n) {
let total = 0;
for (let i = 1; i <= n; i++) {
total += i;
}
return total;
}
์์ ์ฝ๋๋ฅผ ๋น๊ตํด ๋ณด์. 1๋ฒ ์์ ํจ์์ ์ฐ์ฐ ๊ฐ์๋ฅผ ํ์ธํด ๋ณด๋ฉด ๊ณฑํ๊ธฐ, ๋ํ๊ธฐ ๊ทธ๋ฆฌ๊ณ ๋๋๊ธฐ ์ฐ์ฐ์๋ฅผ ๊ฐ๊ณ ์ด 3๋ฒ์ ์ฐ์ฐ์ ํ๊ฒ ๋๋ค. ์์ 2๋ฒ ํจ์๋ ๋ฐ๋ณต๋ฌธ์ด ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ด 5n+2๋ฒ์ ์ฐ์ฐ์ด ์ด๋ค์ง๋ค. (n๋ฒ์ + ์ฐ์ฐ, n๋ฒ์ ํ ๋น, n๋ฒ์ ์ฆ๊ฐ ๋ฑ) ๋ ์ด์๊ฐ์ด ๋ชจ๋ ์ฐ์ฐ์ ํ๋ ํ๋ ์นด์ดํธํด์ ๋น๊ตํ๋๊ฒ๋ ๊ต์ฅํ ์ด๋ ค์ด ์ผ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ ์ฒด์ ์ธ ์ถ์ธ๋ฅผ ๋ณด๋๊ฒ์ด ๊ต์ฅํ ์ค์ํ๋ค. ์ ์ฒด์ ์ธ ์ถ์ธ๋ฅผ ์๋ ค์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก ๋น ์ค ํ๊ธฐ๋ฒ์ด๋ค.
1.4 ์๊ฐ ๋ณต์ก๋ ์๊ฐํ ํ๊ธฐ
๋ค์์ ํ์ฌ ๊ณต๋ถํ๊ณ ์๋ ํด๋น ๊ฐ์์ ๊ฐ์ฌ๋์ด ๋ง๋ค์ด ๋์ n๊ฐ์ ํจ์์ ํ ๋น ํ์๋์ ์ฐ์ฐ๋๋ ์๊ฐ์ ์๊ฐํด ๋์ ํ์ด์ง๋ค.
https://rithmschool.github.io/function-timer-demo/
์์ ์ฌ์ง ์ฒ๋ผ ์์ฑ๋ ์ฝ๋์ ๋ฐ๋ผ ์ฐ์ฐํ๋๋ฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ๋ค๋ฅด๋ค. ๋น ์ค ํ๊ธฐ๋ฒ์ ์ ๋ ฅ๋ ๋ด์ฉ์ด ๋์ด๋ ์๋ก ์๊ณ ๋ฆฌ์ฆ์ ์คํ ์๊ฐ์ด ์ด๋ป๊ฒ ๋ณํํ๋์ง ์ค๋ช ํ๋ ๊ณต์์ ์ธ ๋ฐฉ๋ฒ์ด๋ค. ๋น ์ค ํ๊ธฐ๋ฒ์ ์ ๋ฐ์ ์ธ ์ถ์ธ์ ์ฃผ๋ชฉํ๋ ๊ฒ์ด๋ค. ๋ค์์ ๋น ์ค ํ๊ธฐ๋ฒ์ผ๋ก ํจ์๋ฅผ ํํํด๋ณด์.
function addUpTo(n) {
return n * (n + 1) / 2;
}
์ ์ฝ๋์ n์ ํฌ๊ธฐ๊ฐ ์ปค์ ธ๋ ์ฐ์ฐํด์ผ ํ๋ ํ์๋ 3๋ฒ์ผ๋ก ์ ํด์ ธ ์๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ๋๋ ์๊ฐ์ ๋์ผํ๋ค.(์ฝ 0.0002์ด) ์ด๋ฅผ ์์๋ผ๊ณ ํํํ๋ฉฐ ๋น ์ค ํ๊ธฐ๋ฒ์ผ๋ก๋ O(1)์ด๋ผ ํํํ๋ค.(์ ๊ทธ๋ํ์ ํ๋์ ์ถ์ธ์ ์ด๋ค.)
function addUpToFirst(n) {
var total = 0;
for (var i = 0; i <= n; i++) {
total += i;
}
return total;
}
์ ์ฝ๋์ n์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ฉด ์ปค์ง์๋ก ์ฐ์ฐํด์ผ ํ๋ ํ์๋ ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ๋๋ ์๊ฐ๋ ๋น๋กํด์ ๊ฐ์ด ๋์ด๋๋ค. ์ด๋ฅผ ๋น ์ค ํ๊ธฐ๋ฒ์ผ๋ก๋ O(N)์ด๋ผ ํํํ๋ค.(์ ๊ทธ๋ํ์ ์ด๋ก์ ์ถ์ธ์ ์ด๋ค.)
function countUpAndDown(n) {
console.log("Going up!");
for (var i = 0; i < n; i++) {
console.log(i);
} //O(N)
console.log("At the top!\nGoing down...");
for (var j = n - 1; j >= 0; j--) {
console.log(j);
} //O(N) ---> ๊ทธ๋ ๋ค๊ณ O(2N)์ด๋ผ ํ์ง ์์
console.log("Back down. Bye!");
}
ํ ๊ฐ์ง ์ฃผ์ํด์ผ ํ ์ ์ N(์ฐ์ฐ ํ์)์ด 2N์ด๋ 5N์ด๋ O(N)์ผ๋ก ํ์ํ๋ค. ์์์ ์ธ๊ธํ๋ฏ์ด ๋น ์ค ํ๊ธฐ๋ฒ์ ์ ๋ฐ์ ์ธ ์ถ์ธ๋ฅผ ํ์ธํ๋ ๊ฒ์ด๊ณ , ๊ทธ๋ํ๋ก ํ์ธํ๋ฏ์ด ๋ณํจ์ด ์๊ธฐ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ํ์ ์ผ๋ก๋ n์ ๊ฐ์ 1์ต์ ๋ฃ๋๋ผ๋, ์ถ์ธ์ ์ ๋ณํจ์ด ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ O(N)์ด๋ผ ํํํ๋ค.
function printAllPairs(n) {
for (var i = 0; i < n; i++) {
for (var j = 0; j < n; j++) {
console.log(i, j);
}
}
}
์ค์ฒฉ ๋ฐ๋ณต๋ฌธ์ ๊ฒฝ์ฐ์๋ O(N)์์์ ๋ O(N)์ด ๋๊ธฐ ๋๋ฌธ์ O(N^2)์ด๋ผ ํํํ๋ค. (์ ๊ทธ๋ํ์ ๋นจ๊ฐ์ ์ถ์ธ์ ์ด๋ค.)
1.6 ๋น ์ค ํ๊ธฐ๋ฒ ๋จ์ํ
๋ค์์ผ๋ก๋ ๋น ์ค ํ๊ธฐ๋ฒ์ ๋จ์ํํ ์์๋ค์ ์ดํด๋ณด์.
1. O(2N) --> O(N)
2. O(500) --> O(1)
3. O(13N์ ๊ณฑ) --> O(N์ ๊ณฑ)
4. O(N + 10) --> O(N)
5. O(1000N + 50) --> O(N)
6. O(N์ ๊ณฑ + 5N + 8) --> O(N์ ๊ณฑ)
์์ ์์ ๋ค์ฒ๋ผ ๋จ์ํํ ์ ์๋ ์ด์ ๋ ์ถ์ธ์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋น ์ค ํ๊ธฐ๋ฒ์ ์ถ์ธ๋ฅผ ํ์ธํ๋ ๊ฒ์ด๋ค. ์ฐ์ฐํ๋ ํ์๊ฐ ๋ฌดํ๋๋ก ์ฆ๊ฐํ์๋๋ ์ถ์ธ์ ์๋ ๋ณํจ์ด ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
1.7 ๊ณต๊ฐ ๋ณต์ก๋
์ด์ ๊น์ง๋ ์ ๋ ฅ์ด ์ปค์ง์๋ก ์๊ณ ๋ฆฌ์ฆ์ ์คํ์๋๊ฐ ์ด๋ป๊ฒ ๋ฐ๋๋์ง ๋ถ์ํ ์๊ฐ ๋ณต์ก๋์ ๋ํด์ ๋ฐฐ์ ๋ค๋ฉด ์ง๊ธ๋ถํฐ ํ์ธํ ๋ด์ฉ์ ์ ๋ ฅ์ด ์ปค์ง์๋ก ์๊ณ ๋ฆฌ์ฆ์ด ์ผ๋ง๋ ๋ง์ ๊ณต๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐจ์งํ๋์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ๋น ์ค ํ๊ธฐ๋ฒ๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ณด๋ ค๊ณ ํ๋ค.
function sum(arr){
let total = 0;
for (let i = 0; i < arr.length ; i++){
total += arr[1]
}
return tatal;
}
์ ์ฝ๋์์ ๊ณต๊ฐ์ ์ฐจ์งํ๋ ๊ฒ์ total๊ณผ i๋ณ์๋ค. ๋งค๊ฐ๋ณ์ arr์ ์ด๋ค ๊ฐ์ด ์ธ์๋ก ์ ๋ฌ๋์ด๋ ์ ์ฅ๋๋ ๊ณต๊ฐ์ ๊ณ์ํด์ ์ผ์ ํ๋ค. ๋ฐ๋ผ์ ๋ณ์ total๊ณผ i์ ๊ณต๊ฐ์ ๊ณ์ ์์๋ก ์กด์ฌํ๋ค. ๋น ์ค ํ๊ธฐ๋ฒ์ผ๋ก๋ O(1)๋ก ํํํ๋ค.
function double(arr){
let newArr = [];
for (let i = 0 ; i < arr.length; i++){
newArr.push(2 * arr[i]);
}
return newArr;
}
์ ์ฝ๋์ ๊ฒฝ์ฐ ๋งค๊ฐ๋ณ์ arr์ ์ธ์๋ก ์ ๋ฌ๋๋ ๊ฐ์ด ํฌ๋ฉด ํด์๋ก ๋ณ์ newArr์ ๊ณต๊ฐ์ด ์ ์ฅ๋๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ์ปค์ง๋ค. ์ฆ ๋น๋กํ์ฌ ์ฆ๊ฐํ๋ค. ์ด๋ฅผ ๋น ์ค ํ๊ธฐ๋ฒ์ผ๋ก๋ O(N)์ด๋ผ ํํํ๋ค.
'๐ Language & CS knowledge > Algorithm & Data structure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
06 ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ (0) | 2022.08.05 |
---|---|
05 ์ฌ๊ท (0) | 2022.08.04 |
04 ๋ฌธ์ ํด๊ฒฐ ํจํด (0) | 2022.08.04 |
03 ๋ฌธ์ ํด๊ฒฐ ์ ๊ทผ๋ฐฉ๋ฒ (0) | 2022.08.04 |
02 ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด์ ์ฑ๋ฅ ํ๊ฐ (0) | 2022.08.01 |