Jieunny의 λΈ”λ‘œκ·Έ

[JS] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - kμ§„μˆ˜μ—μ„œ μ†Œμˆ˜ 개수 κ΅¬ν•˜κΈ° λ³Έλ¬Έ

Study/Coding Test

[JS] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - kμ§„μˆ˜μ—μ„œ μ†Œμˆ˜ 개수 κ΅¬ν•˜κΈ°

Jieunny 2023. 4. 4. 15:14

πŸ“Œ  문제

μ–‘μ˜ μ •μˆ˜ n이 μ£Όμ–΄μ§‘λ‹ˆλ‹€. 이 숫자λ₯Ό kμ§„μˆ˜λ‘œ 바꿨을 λ•Œ, λ³€ν™˜λœ 수 μ•ˆμ— μ•„λž˜ 쑰건에 λ§žλŠ” μ†Œμˆ˜(Prime number)κ°€ λͺ‡ κ°œμΈμ§€ μ•Œμ•„λ³΄λ € ν•©λ‹ˆλ‹€.

 

- 0P0처럼 μ†Œμˆ˜ μ–‘μͺ½μ— 0이 μžˆλŠ” 경우

- P0처럼 μ†Œμˆ˜ 였λ₯Έμͺ½μ—λ§Œ 0이 있고 μ™Όμͺ½μ—λŠ” 아무것도 μ—†λŠ” 경우

- 0P처럼 μ†Œμˆ˜ μ™Όμͺ½μ—λ§Œ 0이 있고 였λ₯Έμͺ½μ—λŠ” 아무것도 μ—†λŠ” 경우

- P처럼 μ†Œμˆ˜ μ–‘μͺ½μ— 아무것도 μ—†λŠ” 경우

- 단, PλŠ” 각 μžλ¦Ώμˆ˜μ— 0을 ν¬ν•¨ν•˜μ§€ μ•ŠλŠ” μ†Œμˆ˜μž…λ‹ˆλ‹€.

    γ„΄ 예λ₯Ό λ“€μ–΄, 101은 Pκ°€ 될 수 μ—†μŠ΅λ‹ˆλ‹€.

 

예λ₯Ό λ“€μ–΄, 437674을 3μ§„μˆ˜λ‘œ λ°”κΎΈλ©΄ 211020101011μž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ 찾을 수 μžˆλŠ” 쑰건에 λ§žλŠ” μ†Œμˆ˜λŠ” μ™Όμͺ½λΆ€ν„° μˆœμ„œλŒ€λ‘œ 211, 2, 11이 있으며, 총 3κ°œμž…λ‹ˆλ‹€. (211, 2, 11을 kμ§„λ²•μœΌλ‘œ λ³΄μ•˜μ„ λ•Œκ°€ μ•„λ‹Œ, 10μ§„λ²•μœΌλ‘œ λ³΄μ•˜μ„ λ•Œ μ†Œμˆ˜μ—¬μ•Ό ν•œλ‹€λŠ” 점에 μ£Όμ˜ν•©λ‹ˆλ‹€.) 211은 P0 ν˜•νƒœμ—μ„œ 찾을 수 있으며, 2λŠ” 0P0μ—μ„œ, 11은 0Pμ—μ„œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

 

μ •μˆ˜ nκ³Ό kκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§‘λ‹ˆλ‹€. n을 kμ§„μˆ˜λ‘œ 바꿨을 λ•Œ, λ³€ν™˜λœ 수 μ•ˆμ—μ„œ 찾을 수 μžˆλŠ” μœ„ 쑰건에 λ§žλŠ” μ†Œμˆ˜μ˜ 개수λ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄ μ£Όμ„Έμš”.

 

πŸ’‘  아이디어

kμ§„μˆ˜λ‘œ λ°”κΏ”μ„œ 0을 κΈ°μ€€μœΌλ‘œ μͺΌκ°  λ‹€μŒ μ†Œμˆ˜λ₯Ό 찾으면 λ˜λŠ” λ¬Έμ œλ‹€.

μœ„μ˜ 쑰건을 ꡳ이 switchλ‚˜ if문으둜 λ‚˜λˆŒ ν•„μš”κ°€ μ—†λŠ” μ΄μœ λŠ” 0으둜 split ν–ˆμ„ λ•Œμ˜ λͺ¨λ“  κ²½μš°κ°€ 쑰건에 있기 λ•Œλ¬Έμ΄λ‹€.

 

✏️  풀이

function solution(n, k) {
  var answer = 0;
  let trans = n.toString(k);
  // k μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜κΈ°
  let nonZero = trans.split(0);
  // 0을 κΈ°μ€€μœΌλ‘œ μͺΌκ°œκΈ°
  
  for(let i=0; i<nonZero.length; i++){
    if(nonZero[i].length === 0) continue;
    // '' 인 경우 κ±΄λ„ˆλ›°κΈ°
    else {
      let ten = parseInt(nonZero[i], 10);
      // 10μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜κΈ°
      if(isPrime(ten) === true){
        answer++;
      }
    }
  }

  return answer;
}

function isPrime(num) {
// μ†Œμˆ˜ νŒλ³„ ν•¨μˆ˜
  console.log(num)
  if(num === 2) {
    return true;
  }

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

  return true; 
}