μ€λμ μκ°μ νκ³λ₯Ό λͺ»λμ΄μ λΉλλμ μ½λλ₯Ό λ³΄κ³ κ³΅λΆνλ μκ°μΌλ‘ λ체νλ€.
μ²μμ for λ¬ΈμΌλ‘ 1, 2, λ₯Ό μ μΈν μ΄νμ μ«μλΆν° μ½μμ κ°μλ₯Ό μΈμ΄λ³΄κ³ μμμΈμ§ μλμ§ νλ³νλ λ°©μμΌλ‘ νμλλ°,
λ²μκ° λ무 λ§μλμ§ μκ°μ΄κ³Όλ‘ ν΅κ³Όλμ§ λͺ»νλ€.
μ΄λ κ² μ κ³±κ·Όμ μ΄μ©νλ©΄ ν¨μ¬ λ μ μ λ²μ λ΄μμ μ½μλ₯Ό ꡬν μ μλ€.
μ΄μ°¨νΌ μ½μλ λ μμ κ³±μΌλ‘ μ΄λ€μ§κΈ° λλ¬Έμ 16μ μ½μμΈ 2λ₯Ό ꡬνλ€λ©΄ μλμΌλ‘ 8λ μ‘΄μ¬νλ κ²μ΄κΈ° λλ¬Έμ΄λ€.
λΉλλμ μ½λλ₯Ό 보면 μμλ₯Ό ꡬνλ€κΈ° 보λ¨,
μμκ° μλ μλ₯Ό μκ±°ν΄μ£Όλ λ°©μμ μ±ννκ³ μλ€.
function solution(n) {
let isPrime = new Array(n + 1).fill(true).fill(false, 0, 2)
for (let i = 2; i <= Math.sqrt(n); i++) {
if (isPrime[i]) {
for (let j = i * i; j <= n; j += i) {
isPrime[j] = false
}
}
}
return isPrime.filter(Boolean).length;
}
μ²μμ μ μ΄ν΄κ° μκ°μ§λ§,
νλμ© λ³΄λ©° μμ λ₯Ό λλ €λ³΄λ μ΄ν΄κ° κ°λ€.
λ¨Όμ isPrime μ΄λ λ°°μ΄μ λ§λ€μ΄μ£Όλλ°, n λ³΄λ€ νλ λν κΈΈμ΄λ‘ λ§λ€μ΄μ€λ€.
μ΄λ for λ¬Έμμ index μ i λΌλ μ½μλ₯Ό μΌμΉμν€κΈ° μν¨μ΄λ€.
true λ‘ μ±μ΄ λ°°μ΄μμ μμκ° μλ κ²λ€λ§ false λ‘ λ°κΏμ€λ€.
μ²μμ index 0, 1 λ μμκ° μλκΈ° λλ¬Έμ falseλ€.
κ·ΈλΌ μ²μμ 2κ° true μ΄λ―λ‘
μμͺ½μ μλ for λ¬Έμ λλ©° 2*2 λΆν° 2μ λ°°μλ€μ΄ false κ° λλ€. (4, 6, 8, 10,,,)
κ·Έ λ€μμ 3*3 λΆν° 3μ λ°°μλ€μ΄ false κ° λλ€. (9, 12, 15, 18, 21,,,)
μ΄λ°μμΌλ‘ λ€μμ 5, 7, λ±μΌλ‘ μμκ° μλ μ«μλ€μ΄ μκ±°λλ€.
μ λΆ μκ±°λ λ°°μ΄μμ true μΈ μμλ§ filter λ‘ κ±Έλ¬μ€ λ°°μ΄μ length κ° n κΉμ§μ μμμ κ°μκ° λλ€.
μκ±°λ² λ―μ°λ€!