ํฐ์คํ ๋ฆฌ ๋ทฐ
์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋?
์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ ๊ฐ์ฅ ๋ํ์ ์ธ *์์(Prime Number) ํ๋ณ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ์์๋ฅผ ๋๋์ผ๋ก ๋น ๋ฅด๊ณ ์ ํํ๊ฒ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
*์์ : ์์ ์ฝ์๋ฅผ ๋๊ฐ(1๊ณผ ์์ )๋ง ๊ฐ์ง๋ ์์ฐ์
์ผ๋ฐ์ ์ผ๋ก ํจ์จ์ ์ธ ์์ ํ๋ณ ์๊ณ ๋ฆฌ์ฆ
const arr = [];
for(let i=2;i<=10;i++) {
let find = true;
for(let j=2;j<=Math.sqrt(i);j++) {
if(i%j == 0) {
find = false;
break;
}
}
if(find) {
arr.push(i);
}
}
console.log(arr); // [2, 3, 5, 7]
๊ฐ์ฅ ์๊ฐํ๊ธฐ ์ฌ์ด N์ ์์ ํ๋ณ ์๊ณ ๋ฆฌ์ฆ์ 2 ~ N-1๊น์ง์ ์ซ์ ์ค์์ ๋๋์ด ๋จ์ด์ง๋ ์๊ฐ ์์๋ ์์๋ผ๊ณ ํ๋ณ ํ ์ ์์ง๋ง, N์ ์ฝ์๋ ๋ฌด์กฐ๊ฑด √N๋ฒ์ ์์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ √N๊น์ง ํ์ธํ์ ๋ O(√N)์ผ๋ก ์กฐ๊ธ ํจ์จ์ ์ผ๋ก ์์๋ฅผ ๊ตฌํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ 1๊ฐ์ ์ซ์์ ๋ํด ์์๋ฅผ ๊ตฌํ ๋ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
์๋ผํ ์คํ ์ฒด๋ค์ค์ ์ฒด ์๊ณ ๋ฆฌ์ฆ
์์๋ฅผ ๋๋์ผ๋ก ๋น ๋ฅด๊ณ ์ ํํ๊ฒ ๊ตฌํ๊ธฐ ์ํด์๋ ์๋ผํ ์คํ ์ฒด๋ค์ค์ ์ฒด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ํจ์จ์ ์ ๋๋ค.
const arr = [];
const check = Array(10+1).fill(true);
let m = Math.floor(Math.sqrt(10));
//i = 2 ๋ถํฐ i์ ๋ฐฐ์๋ฅผ ๋ชจ๋ true๋ก ์ง์๋๋ค.
//์ด๋, ์ด๋ฏธ ์ง์์ง ์ซ์๋ continueํฉ๋๋ค.
for(let i = 2; i <= m; i++){
if(check[i]){
arr.push(i);
let temp = i+i;
while(temp < check.length){
check[temp] = false;
temp += i;
}
}
}
for(let i = m+1; i < check.length; i++){
if(check[i]) arr.push(i);
}
console.log(arr); // [2, 3, 5, 7]
์๋ผํ ์คํ ์ฒด๋ค์ค์ ์ฒด๋ ๊ฐ์ฅ ๋จผ์ ์์๋ฅผ ๋ฐ๋ณํ ๋ฒ์๋งํผ ๋ฐฐ์ด์ ํ ๋นํ๊ณ ๊ทธ ์ธ๋ฑ์ค์ true๊ฐ์ ๋ฃ์ด์ค๋๋ค.
๋ค์์ผ๋ก, 2 ~ √N ๊น์ง ์์ ์ ์ ์ธํ ๊ฐ ์ซ์์ ๋ฐฐ์๋ค์ ์ธ๋ฑ์ค์ ํด๋นํ๋ ๋ฐฐ์ด๊ฐ์ false๋ก ์ ์ธ์ํต๋๋ค. ์ด๋, ๊ฐ ์ซ์์ ๋ฐฐ์๋ค์ ์ ์ธ์ํค ์ ์ ์ด๋ฏธ false๊ฐ์ด๋ผ๋ฉด ํด๋น ์์ ๋ฐฐ์๋ค์ ์ด๋ฏธ ์ ๊ฑฐ๋์ผ๋ฏ๋ก ๊ฑด๋๋๋๋ค.
์๋ฅผ ๋ค์ด, N์ด 10์ธ ๊ฒฝ์ฐ Math.sqrt(10) = 3.1622776601683795 ์ด๋ฏ๋ก 2, 3, 4์ ๋ฐฐ์๋ค์ ์ ์ธ์ํต๋๋ค.
1) 2์ ๋ฐฐ์๋ฅผ ์ ๊ฑฐ
true (i=2) | true | false | true | false | true | false | true | false (i=10) |
2) 3์ ๋ฐฐ์๋ฅผ ์ ๊ฑฐ
true | true | false | true | false | true | false | false | false |
๋ฐ๋ผ์, ๋ฐฐ์ด์์ true์ธ index๋ค๋ง ๋ฝ์๋ธ๋ค๋ฉด 2, 3, 5, 7 ์ด ๋๊ณ ์๊ฐ ๋ณต์ก๋๋ O(N^(1/2))๋ก ๊ณ์ฐ์ด ๊ฐ๋ฅํฉ๋๋ค.
[์ฐธ๊ณ ]
'CS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] DP(Dynamic Programming)๋? (0) | 2022.10.25 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ์ ๋ ฌ(Sorting Algorithm)์ด๋? (1) | 2022.09.25 |
- Total
- Today
- Yesterday
- ๋์์ธ ํจํด
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- ์นด์นด์ค ์ธํด
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
- ๋ฐฑ์ค node.js
- ํ๋กํผํฐ
- ๋ฐฑ์ค
- ๋คํธ์ํฌ
- fp
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- JavaScript
- TDD
- ๋ ์์ปฌ ํ๊ฒฝ
- Baekjoon
- ๋ฐฑ์ค javascript
- map
- ์ด์์ฒด์
- http
- ํฌํฌ์ธํฐ
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- ์ ์ญ ๋ณ์
- ์๋ฐ
- ํ๋กํ ์ฝ
- ํ๋ก๊ทธ๋๋จธ์ค
- git
- ์๊ณ ๋ฆฌ์ฆ
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ์ด๋ถํ์
- ์ฝ๋ฉํ ์คํธ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 | 31 |