๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[Javascript] k์ง„์ˆ˜์—์„œ ์†Œ์ˆ˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ (92335)

๋ฌธ์ œ๋งํฌ

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - k์ง„์ˆ˜์—์„œ ์†Œ์ˆ˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ

๋ฌธ์ œ ์„ค๋ช… ์–‘์˜ ์ •์ˆ˜ n์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด ์ˆซ์ž๋ฅผ k์ง„์ˆ˜๋กœ ๋ฐ”๊ฟจ์„ ๋•Œ, ๋ณ€ํ™˜๋œ ์ˆ˜ ์•ˆ์— ์•„๋ž˜ ์กฐ๊ฑด์— ๋งž๋Š” ์†Œ์ˆ˜(Prime number)๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€ ์•Œ์•„๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. 0P0์ฒ˜๋Ÿผ ์†Œ์ˆ˜ ์–‘์ชฝ์— 0์ด ์žˆ๋Š” ๊ฒฝ์šฐ P0์ฒ˜๋Ÿผ ์†Œ

programmers.co.kr

 

 

์ ‘๊ทผ ๋ฐฉ๋ฒ•

๋ฌธ์ œ์˜ ์„ค๋ช…๋Œ€๋กœ ์ ‘๊ทผํ•˜๋ฉด ๋œ๋‹ค.

1. n์„ k์ง„์ˆ˜๋กœ ๋ณ€ํ™”ํ•œ๋‹ค. : n.toString(k)

2. 0P0์ฒ˜๋Ÿผ ์†Œ์ˆ˜ ์–‘์ชฝ์— 0์ด ์žˆ๋Š” ๊ฒฝ์šฐ
    P0์ฒ˜๋Ÿผ ์†Œ์ˆ˜ ์˜ค๋ฅธ์ชฝ์—๋งŒ 0์ด ์žˆ๊ณ  ์™ผ์ชฝ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ๊ฒฝ์šฐ
    0P์ฒ˜๋Ÿผ ์†Œ์ˆ˜ ์™ผ์ชฝ์—๋งŒ 0์ด ์žˆ๊ณ  ์˜ค๋ฅธ์ชฝ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ๊ฒฝ์šฐ
    P์ฒ˜๋Ÿผ ์†Œ์ˆ˜ ์–‘์ชฝ์— ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ๊ฒฝ์šฐ
    ์œ„์˜ ์กฐ๊ฑด๋“ค์€ ๋ณ€ํ™”ํ•œ k์ง„์ˆ˜๋ฅผ 0์œผ๋กœ split()ํ•˜๋ฉด ๋‚˜๋‰˜๊ฒŒ ๋œ๋‹ค.

3. ์†Œ์ˆ˜๋ฅผ ํŒ๋ณ„ํ•˜๋Š” isPrimeํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์—ฌ split()๋œ ๋ฐฐ์—ด์„ ์ •์ˆ˜๋กœ ๋ฐ”๊พธ๊ณ  ์†Œ์ˆ˜์ธ์ง€ ํŒ๋ณ„ํ•œ๋‹ค.


์ฃผ์˜ ์‚ฌํ•ญ

k ์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ 0์„ ๊ธฐ์ค€์œผ๋กœ split("0") ํ• ๋•Œ, ์ด์–ด์ง„ 0๋“ค์ด ์žˆ์œผ๋ฉด ""๋กœ ๋‚˜๋‰˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.
let n = 43765, k = 3;
const arr = n.toString(k).split("0");
// '2020000221' => ['2', '2', '', '', '', '221']โ€‹

๋งŒ์•ฝ ์ด๋Œ€๋กœ Numberํ˜•์œผ๋กœ ์น˜ํ™˜ํ•˜๋ฉด ""์„ 0์œผ๋กœ ์ธ์‹ํ•˜์—ฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

console.log(Number(""))
// 0โ€‹

๋•Œ๋ฌธ์— for๋ฌธ์—์„œ arr[i] === "" ์ผ๋•Œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๊ฑฐ๋‚˜

isPrime() ํ•จ์ˆ˜์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜ number === 0 ์ผ๋•Œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

(ํ›„์ž๊ฐ€ ๋” ์ข‹์„๋“ฏ)

 

const solution = (n, k) => {
  let primeCnt = 0;

  const arr = n.toString(k).split("0");

  for (let i = 0; i < arr.length; i++) {
    //if(arr[i] === "") continue;
    if (isPrime(Number(arr[i]))) primeCnt++;
  }
  return primeCnt;
};

const isPrime = (number) => {
  if (number <= 1) return false;
  if (number === 2) return true;
    
  for (let i = 2; i <= Math.sqrt(number); i++) {
    if (number % i === 0) return false;
  }

  return true;
};