Algorithm/์ธํ”„๋Ÿฐ(inflearn)

[JavaScript/section 4] 02 - ๋’ค์ง‘์€ ์†Œ์ˆ˜

_์„ฑํ˜ธ_ 2022. 9. 14. 14:46
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ ๋ฌธ์ œ

N๊ฐœ์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ์ž…๋ ฅ๋˜๋ฉด ๊ฐ ์ž์—ฐ์ˆ˜๋ฅผ ๋’ค์ง‘์€ ํ›„ ๊ทธ ๋’ค์ง‘์€ ์ˆ˜๊ฐ€ ์†Œ์ˆ˜์ด๋ฉด ๊ทธ ์†Œ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 32๋ฅผ ๋’ค์ง‘์œผ๋ฉด 23์ด๊ณ , 23์€ ์†Œ์ˆ˜์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด 23์„ ์ถœ๋ ฅํ•œ๋‹ค. 

๋‹จ, 910์„ ๋’ค์ง‘์œผ๋ฉด 19๋กœ ์ˆซ์žํ™” ํ•ด์•ผ ํ•œ๋‹ค. ์ฒซ ์ž๋ฆฌ๋ถ€ํ„ฐ์˜ ์—ฐ์†๋œ 0์€ ๋ฌด์‹œํ•œ๋‹ค.

 

์ฐธ๊ณ  ์‚ฌํ•ญ

1๏ธโƒฃ 2 ์ด์ƒ์ธ ์ž์—ฐ์ˆ˜๋ฅผ 2๋ถ€ํ„ฐ ํ•ด๋‹น ์ž์—ฐ์ˆ˜์˜ ์ œ๊ณฑ๊ทผ๊นŒ์ง€ ๋‚˜๋ˆ„์—ˆ์„ ๋•Œ ๋‚˜๋จธ์ง€ ๊ฐ’์œผ๋กœ 0์ด ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ•ด๋‹น ์ž์—ฐ์ˆ˜๋Š” ์†Œ์ˆ˜์ด๋‹ค.

2๏ธโƒฃ ์ˆ˜์‹๋งŒ์„ ์ด์šฉํ•˜์—ฌ ์ž์—ฐ์ˆ˜๋ฅผ ๋’ค์ง‘๋Š” ๋ฐฉ๋ฒ•

  • ๋’ค์ง‘์€ ์ˆ˜๋ฅผ ์ €์žฅํ•  res๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
  • ์ž์—ฐ์ˆ˜(x)๋ฅผ 10์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€(t)๋ฅผ ๊ฐ€์ง€๊ณ  ๋‹ค์Œ ์ˆ˜์‹(res = res * 10 + t)์˜ ๊ฒฐ๊ณผ๋ฅผ res์— ์ €์žฅํ•œ๋‹ค.
  • ์ž์—ฐ์ˆ˜๋ฅผ 10์œผ๋กœ ๋‚˜๋ˆˆ ๋ชซ์„ ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ ์ž์—ฐ์ˆ˜๊ฐ€ ์ €์žฅ๋œ x์— ์žฌํ• ๋‹นํ•œ๋‹ค.
  • x๊ฐ€ 0์ด ๋ ๋•Œ๊นŒ์ง€ ์œ„์˜ 2~3 ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€ 0์ด ๋˜๋ฉด while ๋ฌธ์„ ๋น ์ ธ๋‚˜์˜จ๋‹ค.

 

๐Ÿ“ ํ’€์ด

๐Ÿง‘๐Ÿป‍๐Ÿ’ป ๋‚˜์˜ ํ’€์ด ๋ฐฉ๋ฒ•

  • split(), reverse(), join() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์—ฐ์ˆ˜๋ฅผ ๋’ค์ง‘๋Š”๋‹ค. 
  • isPrime() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์†Œ์ˆ˜๋ฅผ ํŒ๋ณ„ํ•˜๊ณ  ์†Œ์ˆ˜์ผ ๊ฒฝ์šฐ answer์— ํ•ด๋‹น ์†Œ์ˆ˜๋ฅผ ํ‘ธ์‹œํ•œ๋‹ค.
// ์†Œ์ˆ˜๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ํ•จ์ˆ˜
function isPrime(num) {
  if (num === 1) return false;
  for (let i = 2; i <= parseInt(Math.sqrt(num)); i++) {
    if (num % i === 0) return false;
  }
  return true;
}

function solution(arr) {
  let answer = [];

  for (let x of arr) {
    const num = parseInt(String(x).split('').reverse().join(''));
    if (isPrime(num)) answer.push(num);
  }

  return answer.join(' ');
}

let arr = [32, 55, 62, 20, 250, 370, 200, 30, 100];
console.log(solution(arr));

 

๐Ÿ‘จ๐Ÿผ‍๐Ÿซ ๊ฐ•์‚ฌ๋‹˜ ํ’€์ด ๋ฐฉ๋ฒ•

  • ์ฐธ๊ณ  ์‚ฌํ•ญ 2๋ฒˆ๊ณผ ๊ฐ™์ด ์ˆ˜์‹๋งŒ์„ ์ด์šฉํ•˜์—ฌ ์ž์—ฐ์ˆ˜๋ฅผ ๋’ค์ง‘๋Š”๋‹ค.
  • isPrime() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์†Œ์ˆ˜๋ฅผ ํŒ๋ณ„ํ•˜๊ณ  ์†Œ์ˆ˜์ผ ๊ฒฝ์šฐ answer์— ํ•ด๋‹น ์†Œ์ˆ˜๋ฅผ ํ‘ธ์‹œํ•œ๋‹ค.
function isPrime(num) {
  if (num === 1) return false;
  for (let i = 2; i <= Math.sqrt(num); i++) {
    if (num % i === 0) return false;
  }
  return true;
}

function solution(arr) {
  let answer = [];

  for (let x of arr) {
    let res = 0;
    while (x) {
      let t = x % 10;
      res = res * 10 + t;
      x = parseInt(x / 10);
    }
    if (isPrime(res)) answer.push(res);
  }

  return answer;
}

let arr = [32, 55, 62, 20, 250, 370, 200, 30, 100];
console.log(solution(arr));