๐Ÿ“ ๊ฐœ๋ฐœ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค k์ง„์ˆ˜์—์„œ ์†Œ์ˆ˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ


๋ฌธ์ œ ์‚ดํŽด๋ณด๊ธฐ

๋ฌธ์ œ๋ฅผ ์ฝ์–ด๋ณด๋ฉด ๊ต‰์žฅํžˆ ๊ฐ„๋‹จํ•  ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋จผ์ € ๋“ ๋‹ค.
10์ง„์ˆ˜๋ฅผ k์ง„์ˆ˜๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ๋‚˜๋ˆ—์…ˆ์˜ ๋ชซ๊ณผ ๋‚˜๋จธ์ง€๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜ ์กฐ๊ฑด๋„ ์–ผํ• ๋ณด๋ฉด ๋ณต์žกํ•ด ๋ณด์ด์ง€๋งŒ ์กฐ๊ธˆ๋งŒ ๋” ์ƒ๊ฐํ•ด๋ณด๋ฉด ๊ทธ๋ƒฅ 0์œผ๋กœ splitํ•˜๋ฉด ํ•ด๊ฒฐ๋œ ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  • 0P0์ฒ˜๋Ÿผ ์†Œ์ˆ˜ ์–‘์ชฝ์— 0์ด ์žˆ๋Š” ๊ฒฝ์šฐ
  • P0์ฒ˜๋Ÿผ ์†Œ์ˆ˜ ์˜ค๋ฅธ์ชฝ์—๋งŒ 0์ด ์žˆ๊ณ  ์™ผ์ชฝ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ๊ฒฝ์šฐ
  • 0P์ฒ˜๋Ÿผ ์†Œ์ˆ˜ ์™ผ์ชฝ์—๋งŒ 0์ด ์žˆ๊ณ  ์˜ค๋ฅธ์ชฝ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ๊ฒฝ์šฐ
  • P์ฒ˜๋Ÿผ ์†Œ์ˆ˜ ์–‘์ชฝ์— ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ๊ฒฝ์šฐ
  • ๋‹จ, P๋Š” ๊ฐ ์ž๋ฆฟ์ˆ˜์— 0์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ์†Œ์ˆ˜์ž…๋‹ˆ๋‹ค.

๊ตฌํ˜„ํ•˜๊ธฐ

๊ตฌํ˜„ ๊ณผ์ •์„ Step์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
Step 1. 10์ง„์ˆ˜๋ฅผ k์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ
Step 2. ๋ณ€ํ™˜๋œ k์ง„์ˆ˜๋ฅผ 0์œผ๋กœ splitํ•˜๊ธฐ
Step 3. split๋œ ๋ฐฐ์—ด์˜ ์ˆ˜ ์ค‘์—์„œ ์†Œ์ˆ˜์ธ ๊ฒƒ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๊ธฐ

์œ„์˜ Step์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•  ํ•จ์ˆ˜๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด
0์ง„์ˆ˜๋ฅผ k์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜, ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜ ์ด๋ ‡๊ฒŒ ๋‘ ๊ฐœ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

10์ง„์ˆ˜๋ฅผ k์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ ๊ตฌํ˜„ํ•˜๊ธฐ

10์ง„์ˆ˜๋ฅผ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ์ƒ๊ฐํ•ด๋ณด์ž.
์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ 10์ง„์ˆ˜์ธ 19๊ฐ€ ์žˆ๊ณ , ์ด๋ฅผ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค๊ณ  ํ•  ๋•Œ
19๋ฅผ ๊ธฐ์ˆ˜์ธ 2๋กœ ๊ณ„์† ๋‚˜๋ˆˆ ํ›„ ๋‚˜๋จธ์ง€ ๊ฐ’์„ ๊ฑฐ๊พธ๋กœ ์ฝ์œผ๋ฉด ๋ณ€ํ™˜๋œ 2์ง„์ˆ˜ ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.
์ด ๊ณผ์ •์„ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

const convert = (n,k) =>{
    const res = [];
    while (n){
        res.push(n%k);
        n /= k;
        n = Math.floor(n);
    }
    return res.reverse().join('');
}

๋‚˜๋จธ์ง€๋ฅผ ์ €์žฅํ•  Array๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
๊ทธ ๋‹ค์Œ 10์ง„์ˆ˜์ธ n์ด 0์ด ์•„๋‹ ๋•Œ ๊นŒ์ง€ while๋ฌธ์„ ๋Œ๋ฉด์„œ n์„ ๊ธฐ์ˆ˜์ธ k๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๋ฐฐ์—ด์— ๋„ฃ๊ณ , n๊ฐ’์€ n์„ k๋กœ ๋‚˜๋ˆˆ ๋ชซ์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•ด์ค€๋‹ค.
๋‚˜๋จธ์ง€๋ฅผ ๊ฑฐ๊พธ๋กœ ์ฝ์–ด์•ผ ๋ณ€ํ™˜๋œ ์ง„์ˆ˜๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— res ๋ฐฐ์—ด์— ๋‹ด๊ธด ๊ฐ’์„ reverse๋ฅผ ํ†ตํ•ด ๋’ค์ง‘๊ณ  join์„ ํ†ตํ•ด ์—ฐ๊ฒฐํ•œ ํ›„ ๋ฆฌํ„ดํ•ด์ฃผ์—ˆ๋‹ค.

์†Œ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜ ๊ตฌํ˜„ํ•˜๊ธฐ

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋Š” ์•ˆ๋จ!!

๋‚˜์˜ ์ฒซ ๋ฒˆ์งธ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์€ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋กœ ์†Œ์ˆ˜ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•˜๋‹ˆ 1๋ฒˆ์ด๋ž‘ 11๋ฒˆ์—์„œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. MDN - Array: length ์„ ์‚ดํŽด๋ณด๋ฉด javascript์˜ ๋ฐฐ์—ด์˜ ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ 4294967296(2^32)์ธ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
๋งŒ์•ฝ (n,k) = (824225, 3)์ด๋ผ๋ฉด ๋ณ€ํ™˜๋œ 3์ง„์ˆ˜๋Š” 1112212121212์ด ๋˜๊ณ , ์ด๋Š” ๋ฐฐ์—ด์˜ ์ตœ๋Œ€ ์‚ฌ์ด์ฆˆ๋ณด๋‹ค ํฐ ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋˜ ๊ฒƒ์ด๋‹ค.
๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•ด์ค˜์•ผ ํ•œ๋‹ค.

์ œ๊ณฑ๊ทผ ๋ฐฉ๋ฒ•์œผ๋กœ ์†Œ์ˆ˜ ๊ตฌํ•˜๊ธฐ

์–ด๋–ค ์ˆ˜ N์˜ ์•ฝ์ˆ˜๋“ค์€ sqrt(N) ๊ธฐ์ ์œผ๋กœ ๋Œ€์นญ์„ ์ด๋ฃจ๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์ˆ˜๋ฅผ ํŒ๋ณ„ํ•  ๋•Œ๋Š” N์˜ ์ œ๊ณฑ๊ทผ ๊นŒ์ง€๋งŒ ๋ณด๋ฉด ๋œ๋‹ค.
์˜ˆ์‹œ๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ•˜์ž๋ฉด, N = 12 ์ผ ๋•Œ ์•ฝ์ˆ˜๋Š” 1, 2, 3, 4, 6, 12 ๊ฐ€ ๋œ๋‹ค.
์—ฌ๊ธฐ์„œ sqrt(N) = sqrt(12) = 3.X๊ฐ€ ๋œ๋‹ค.
12๋ฅผ ๋‘ ์•ฝ์ˆ˜์˜ ๊ณฑ์œผ๋กœ ํ‘œํ˜„ํ•  ๋•Œ ์ œ๊ณฑ๊ทผ์ธ 4.X๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋Œ€์นญ์ด ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

1 * 12  
2 * 6  
3 * 4  
 
4.x
 
4 * 3  
6 * 2  
12 * 1 

์ด๋ฅผ ํ†ตํ•ด N์ด N์˜ ์ œ๊ณฑ๊ทผ๋ณด๋‹ค ํฐ ์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง„๋‹ค๋ฉด, N์˜ ์ œ๊ณฑ๊ทผ๋ณด๋‹ค ์ž‘์€ ์ˆ˜๋กœ ๋ฌด์กฐ๊ฑด ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง„๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
๋”ฐ๋ผ์„œ N์˜ ์ œ๊ณฑ๊ทผ๊นŒ์ง€๋งŒ ๋‚˜๋ˆ„์–ด๋ณด๋Š” ๊ฒƒ์œผ๋กœ ์†Œ์ˆ˜ ์—ฌ๋ถ€๋ฅผ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด ์ด๋ก ์„ ์ ์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

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

์ „์ฒด ์ฝ”๋“œ

const convert = (n,k) =>{
    const res = [];
    while (n){
        res.push(n%k);
        n /= k;
        n = Math.floor(n);
    }
    return res.reverse().join('');
}
 
const isPrime = (num) => {
    if(num <= 1) return 0;
    for (let i = 2; i<=Math.sqrt(num); i++){
        if(num % i === 0){
            return 0;
        }
    }
    return 1;
}
 
function solution(n, k) {
    return convert(n,k).split('0').reduce((acc,cur)=>acc+isPrime(+cur),0);
}

๋ฌธ์ œ ํ›„๊ธฐ

๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์˜€์ง€๋งŒ ์†Œ์ˆ˜ ํŒ๋ณ„ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ณณ์—์„œ ์–ด๋ ค์›€์ด ์žˆ์—ˆ๋‹ค.
๊ทธ๋ž˜๋„ ์ด ๋ฌธ์ œ ๋•๋ถ„์— ์ œ๊ณฑ๊ทผ์„ ํ†ตํ•ด ์†Œ์ˆ˜๋ฅผ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋˜์–ด ์œ ์ตํ–ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค k์ง„์ˆ˜์—์„œ ์†Œ์ˆ˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ