์•Œ๊ณ ๋ฆฌ์ฆ˜ & ๋ฌธ์ œํ’€์ด/์•Œ๊ณ ๋ฆฌ์ฆ˜

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด

YunCow 2022. 9. 4. 15:45

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด

  • ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋Š” ์†Œ์ˆ˜ ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
  • "์†Œ์ˆ˜"๋ž€ 1๊ณผ ์ž์‹  ์ด์™ธ์— ์ž์—ฐ์ˆ˜๋กœ๋Š” ๋‚˜๋ˆŒ ์ˆ˜ ์—†๋Š” ์ž์—ฐ์ˆ˜์ด๋‹ค. ( 2, 5, 7 ๋“ฑ)
    1.  1~100๊นŒ์ง€์˜ ์ˆซ์ž๋ฅผ ๋‚˜์—ด.
    2.  ์†Œ์ˆ˜๊ฐ€ ์•„๋‹Œ 1์„ ์ œ๊ฑฐ.
    3.  2๋ฅผ ์ œ์™ธํ•œ 2์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ œ๊ฑฐ.
    4.  3์„ ์ œ์™ธํ•œ 3์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ œ๊ฑฐ.
    5.  4์˜ ๋ฐฐ์ˆ˜๋Š” 2์˜ ๋ฐฐ์ˆ˜๋กœ ์ด๋ฏธ ์ง€์›Œ์กŒ์œผ๋ฏ€๋กœ 5๋ฅผ ์ œ์™ธํ•œ 5์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.
    6.  6๋˜ํ•œ 3์˜ ๋ฐฐ์ˆ˜๋กœ ์ง€์›Œ์กŒ์œผ๋ฏ€๋กœ 7์„ ์ œ์™ธํ•œ 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๋ ˆ๋ฒจ ์†Œ์ˆ˜ ์ฐพ๊ธฐ ํ’€ ๋•Œ๋Š” ์ดํ•ด ๋ชป ํ–ˆ์—ˆ๋Š”๋ฐ ์ง€๊ธˆ์€ ํ™•์‹คํ•˜๊ฒŒ ์ดํ•ดํ–ˆ๋‹ค๐Ÿ‘