์๋ผํ ์คํ ๋ค์ค์ ์ฒด
- ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ ์์ ์ฐพ๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
- "์์"๋ 1๊ณผ ์์ ์ด์ธ์ ์์ฐ์๋ก๋ ๋๋ ์ ์๋ ์์ฐ์์ด๋ค. ( 2, 5, 7 ๋ฑ)
- 1~100๊น์ง์ ์ซ์๋ฅผ ๋์ด.
- ์์๊ฐ ์๋ 1์ ์ ๊ฑฐ.
- 2๋ฅผ ์ ์ธํ 2์ ๋ฐฐ์๋ฅผ ์ ๊ฑฐ.
- 3์ ์ ์ธํ 3์ ๋ฐฐ์๋ฅผ ์ ๊ฑฐ.
- 4์ ๋ฐฐ์๋ 2์ ๋ฐฐ์๋ก ์ด๋ฏธ ์ง์์ก์ผ๋ฏ๋ก 5๋ฅผ ์ ์ธํ 5์ ๋ฐฐ์๋ฅผ ์ ๊ฑฐํ๋ค.
- 6๋ํ 3์ ๋ฐฐ์๋ก ์ง์์ก์ผ๋ฏ๋ก 7์ ์ ์ธํ 7์ ๋ฐฐ์๋ฅผ ์ ๊ฑฐ.
- 11 ๋ถํฐ๋ 11^2 > 100 ์ด๊ธฐ์ ์ง์ธ ํ์๊ฐ ์๋ค.
- ์ด๋ฐ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฃผ์ด์ง n์ดํ์ ์์๋ฅผ ์ฐพ๊ณ ์ถ์ ๋ ์ฌ์ฉํ ์ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ตฌํ
function solution(n) {
//n + 1 ๊ฐ์ ์์๋ฅผ ๊ฐ์ง ๋ฐฐ์ด ์์ฑ ๋ชจ๋ true๋ก ๋ณ๊ฒฝ ํ ์์์ ์ธ๊ฐ 0,1 ์ false๋ก ๋ณ๊ฒฝ
let result = Array(n + 1)
.fill(true)
.fill(false, 0, 2);
// ์์ ์์๊ฐ์ธ 2๋ถํฐ ๋ฐ๋ณต๋ฌธ ์์ i * i ์ธ ์ด์ ๋ n์ ๊ฐ๋ณด๋ค ํฐ i ๋ฐฐ์๊น์ง ๋ฐ๋ณต๋ฌธ์ ๋๋ฆด ํ์๋ ์๊ธฐ๋๋ฌธ.
for (let i = 2; i * i <= n; i++) {
//๋ฐฐ์ด์ด true๋ฉด
if (result[i]) {
// ์ค์ฒฉ ๋ฐ๋ณต๋ฌธ ์คํ. j์ i๋ฅผ ๋์
ํด๊ฐ๋ฉฐ ์ฃผ์ด์ง i์ ๋ฐฐ์๋ฅผ ์ ๊ฑฐ
for (let j = i * i; j <= n; j += i) {
result[j] = false;
}
}
}
return result;
}
let resultFn = solution(100);
//filter๋ฉ์๋์ true์ผ ๊ฒฝ์ฐ๋ง ์๋ก์ด ๋ฐฐ์ด์ ๋ค์ด๊ฐ๋ ์ ์ ์ด์ฉ.
resultFn.filter((v) => v).length;
// ์์ ์์ฒด๋ฅผ ์๊ณ ์ถ๋ค๋ฉด map๋ฉ์๋๋ฅผ ์ด์ฉํด์ v๊ฐ true์ผ ๊ฒฝ์ฐ index๊ฐ์ ๋ฃ์ด์ฃผ๊ณ false์ผ ๊ฒฝ์ฐ 0์ ๋ฃ์ด์ค๋ค.
// ์ดํ filterํจ์๋ก ๋ฐฐ์ด์ ๊ฑธ๋ฌ์ ์๋ก ์์ฑ. (0 == false ๋ฅผ ์ด์ฉ)
resultFn.map((v, i) => (v ? i : 0)).filter((v) => v);
- ํ๋ก๊ทธ๋๋จธ์ค 1๋ ๋ฒจ ์์ ์ฐพ๊ธฐ ํ ๋๋ ์ดํด ๋ชป ํ์๋๋ฐ ์ง๊ธ์ ํ์คํ๊ฒ ์ดํดํ๋ค๐
'์๊ณ ๋ฆฌ์ฆ & ๋ฌธ์ ํ์ด > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ (Euclidean algorithm) (0) | 2022.09.28 |
---|---|
ํ์ ์๊ณ ๋ฆฌ์ฆ(Greedy Algorithm) (0) | 2022.09.06 |
์๊ฐ๋ณต์ก๋ (Time Complexity) (4) | 2022.09.03 |