์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์•Œ๊ณ ๋ฆฌ์ฆ˜

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 12921] ์†Œ์ˆ˜ ์ฐพ๊ธฐ (Javascript)

์€์ง„ 2021. 6. 17. 16:32

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป๋ฌธ์ œ๋งํฌ

๋ฌธ์ œ ์„ค๋ช…
1๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›์€ ์ˆซ์ž n ์‚ฌ์ด์— ์žˆ๋Š” ์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”.

์†Œ์ˆ˜๋Š” 1๊ณผ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ๋งŒ ๋‚˜๋ˆ„์–ด์ง€๋Š” ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
(1์€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.)

์ œํ•œ ์กฐ๊ฑด
n์€ 2์ด์ƒ 1000000์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
์ž…์ถœ๋ ฅ ์˜ˆ
n result
10 4
5 3
์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…
์ž…์ถœ๋ ฅ ์˜ˆ #1
1๋ถ€ํ„ฐ 10 ์‚ฌ์ด์˜ ์†Œ์ˆ˜๋Š” [2,3,5,7] 4๊ฐœ๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ 4๋ฅผ ๋ฐ˜ํ™˜

์ž…์ถœ๋ ฅ ์˜ˆ #2
1๋ถ€ํ„ฐ 5 ์‚ฌ์ด์˜ ์†Œ์ˆ˜๋Š” [2,3,5] 3๊ฐœ๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ 3๋ฅผ ๋ฐ˜ํ™˜

โœ๏ธIdea Sketch

2021-06-17 isPrime()

  1. isPrime(num) ํ•จ์ˆ˜ ์ƒ์„ฑ --> output: true/false
  2. 1๋ถ€ํ„ฐ n๊นŒ์ง€ isPrime()ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์†Œ์ˆ˜์—ฌ๋ถ€๋ฅผ ํŒ๋ณ„
  3. ์†Œ์ˆ˜์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€? 1๊ณผ ์ž๊ธฐ์ž์‹ ์„ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€๋Š” ์ˆ˜๊ฐ€ ์žˆ๋Š”๊ฐ€?
    • ๋ฐ˜๋ณต๋ฌธ for(let i=2; i ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์žˆ์„๊นŒ?
    • ์ง์ˆ˜๋ฉด i=2์—์„œ ๋ฐ”๋กœ ๊ฑธ๋Ÿฌ์ง€๊ณ  ์ข…๋ฃŒ. return False
    • ๋ฐ˜๋ณต๋ฌธ for(let i=2; i<=num/2; i++) --> num์ด 25์ธ ๊ฒฝ์šฐ, 2๋ถ€ํ„ฐ 12๊นŒ์ง€ ํ™•์ธ
    • ๋ฐ˜๋ณต๋ฌธ for(let i=2; i<=Math.sqrt(num); i++) --> num์ด 25์ธ ๊ฒฝ์šฐ, 2๋ถ€ํ„ฐ 5๊นŒ์ง€ ํ™•์ธ
    • ํ™€์ˆ˜๋ฉด ์ œ๊ณฑ์ˆ˜๊นŒ์ง€ ํ™•์ธ

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

  1. length๋Š” n, value๋Š” 0/1์ธ ๋ฐฐ์—ด ๋งŒ๋“ค๊ธฐ
  let arr = Array.from({length:n+1}, () => 0)
  1. ์ฒด์— ๊ฑธ๋Ÿฌ์ง„ ๊ฒฝ์šฐ, 1๋กœ ๋ฐ”๊พธ๊ธฐ
    • ๋ฐฐ์—ด๊ฐ’์ด 0์ธ ๊ฒฝ์šฐ, ์†Œ์ˆ˜
    • i์˜ ๋ฐฐ์ˆ˜์ธ ๊ฒฝ์šฐ, ๋ฐฐ์—ด๊ฐ’์„ 1๋กœ ์ €์žฅ
  if (arr[i] === 0) {
    cnt++;
    for (let j=1; i*j<=n; j++) arr[i*j] = 1
  }
  1. isPrime()์€ ํ•„์š”์—†์Œ!!

โœ๏ธ์†Œ์Šค์ฝ”๋“œ

2021-06-17 isPrime() ์‚ฌ์šฉ --> ์ •ํ™•์„ฑ ํ†ต๊ณผ, ํšจ์œจ์„ฑ ํƒˆ๋ฝ

function isPrime(num) {
  for (let i=2; i<=Math.sqrt(num); i++) {
    if (num%i===0) return false;
  }
  return true;
}

function solution(n) {
  let cnt = 0;
  for (let i=2; i<=n; i++) {
    if (isPrime(i)) cnt++;
  }
  return cnt
}

2021-06-17 isPrime()์™€ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด ํ˜ผ์šฉ --> ์ •ํ™•์„ฑ ํ†ต๊ณผ, ํšจ์œจ์„ฑ ํƒˆ๋ฝ

function isPrime(num) {
  for (let i=2; i<=Math.sqrt(num); i++) {
    if (num%i===0) return false;
  }
  return true;
}

function solution(n) {
  let cnt = 0;
  let arr = Array.from({length:n+1}, () => 0)
  for (let i=2; i<=n; i++) {
    if (arr[i] === 0) {
      if (isPrime(i)) {
        cnt++;
        for (let j=1; i*j<=n; j++) arr[i*j] = 1
      }
    }
  }
  return cnt
}

2021-06-17 ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด --> ์ •ํ™•์„ฑ ํ†ต๊ณผ, ํšจ์œจ์„ฑ ํ†ต๊ณผ

function solution(n) {
  let cnt = 0;
  let arr = Array.from({length:n+1}, () => 0)
  for (let i=2; i<=n; i++) {
    if (arr[i] === 0) {
        cnt++;
        for (let j=1; i*j<=n; j++) arr[i*j] = 1
    }
  }
  return cnt
}

โœ๏ธ๋ช…๋‹ต

Set ์‚ฌ์šฉํ•˜๊ธฐ + Math.sqrt(n)

function solution(n) {
    const s = new Set();
    for(let i=1; i<=n; i+=2){
        s.add(i);
    }
    s.delete(1);
    s.add(2); // Set์— ํ™€์ˆ˜๋งŒ ์ €์žฅ -> 1 ์‚ญ์ œ -> 2 ์ถ”๊ฐ€
    for(let j=3; j<=Math.sqrt(n); j++){ 
        if(s.has(j)){
             for(let k=j*2; k<=n; k+=j){ // j์˜ ๋ฐฐ์ˆ˜(k) ์‚ญ์ œ
                s.delete(k);
             }
        }
    }
    return s.size;
}
  1. Set์€ ์ค‘๋ณต์—†๋Š” ๋ฐฐ์—ด
let mySet = new Set();
let mySet = new Set([1, 2, 3, 4, 5]);
mySet.add( 6 );
  1. Set์„ array๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•
let arr = Array.from(mySet)
let arr = Array.from(mySet).sort((a, b) => b-a);
  1. Set ์—ฐ์‚ฐ
s.delete(1);
s.add(2);
s.has(2);
s.size;