[프로그래머스] k진수에서 소수 개수 구하기 문제 풀이 - JavaScript

Haizel·2023년 11월 15일
1

🧬 알고리즘 풀이

목록 보기
51/53
post-thumbnail

[프로그래머스] k진수에서 소수 개수 구하기

문제

양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다.
예를 들어, 437674을 3진수로 바꾸면 211020101011입니다. 여기서 찾을 수 있는 조건에 맞는 소수는 왼쪽부터 순서대로 211, 2, 11이 있으며, 총 3개입니다.
정수 n과 k가 매개변수로 주어집니다. n을 k진수로 바꿨을 때, 변환된 수 안에서 찾을 수 있는 위 조건에 맞는 소수의 개수를 return 하도록 solution 함수를 완성해 주세요.

입/출력 예시

console.log(solution(437674, 3)); // 3
console.log(solution(110011, 10)); // 2

✍️ Solution

const isPrime = (n) => {
  if (n <= 1) return false;

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

  return true;
};

function solution(n, k) {
  return n
    .toString(k)
    .split("0")
    .map(Number)
    .filter((x) => isPrime(x)).length;
}

👉 Solution 해설

  1. toString 메서드를 통해 n을 k진수로 변환한 후, '0'을 기준으로 split 한다.
  2. map 을 통해 데이터타입을 문자열에서 숫자열 타입으로 변환 후 filter로 각 요소를 isPrime 함수의 매개변수로 전달한다.
  3. isPrime의 결과를 length로 리턴한다.

isPrime 함수 : 소수인지 아닌지 판별하는 함수

  1. n이 1이거나 ''라면(0) false를 리턴한다.
  2. 2부터 n제곱근까지의 수로 n을 나눴을 때 나누어 떨어지는 경우가 한 번이라도 있으면 n은 소수가 아니므로 false를 리턴한다.
  3. 1, 2번에 해당하지 않으면 소수므로 true를 리턴한다.
profile
한입 크기로 베어먹는 개발지식 🍰

0개의 댓글