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

woolee의 기록보관소·2022년 11월 2일
0

알고리즘 문제풀이

목록 보기
34/178

문제 출처

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

문제

나의 풀이

1차 시도 (89.3/100)

function solution(n, k) {
  let str = n.toString(k);
  str = str.split('0');
  let answer = 0;
  
  for (let i=0; i<str.length; i++) {
    if (str[i]=='') continue;
    let num = parseInt(str[i]);
    let jud = true;
    
    if (num==1) jud=false;
    for (let i=2; i<Math.sqrt(num); i++) {
      if (num%i==0) {
        jud=false;
        break;
      }
    }
    
    if (jud==true) answer++;
  }

  return answer;
}

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

2차 시도 (통과)

i<Math.sqrt(num)가 아니라 i<=Math.sqrt(num)...
자꾸 실수한다.

  1. toString(진수)로 문자열로 변환한 후, 0으로 split한다.
  2. 문자열이 split된 배열에 대해 for문을 돌면서 소수인지 판별한다.
function solution(n, k) {
  let str = n.toString(k);
  str = str.split('0');
  let answer = 0;
  
  for (let i=0; i<str.length; i++) {
    if (str[i]=='') continue;
    let num = parseInt(str[i]);
    let jud = true;
    
    if (num==1) jud=false;
    for (let i=2; i<=Math.sqrt(num); i++) {
      if (num%i==0) {
        jud=false;
        break;
      }
    }
    
    if (jud==true) answer++;
  }

  return answer;
}

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

다른 풀이

function isPrime(num){
    if(!num || num===1) return false;
    for(let i=2; i<=+Math.sqrt(num); i++){
        if(num%i===0) return false;
    }
    return true;
}

function solution(n, k) {    
    // k진법으로 나눈 후 split
    const candidates = n.toString(k).split('0');
    // 소수 개수 세기
    return candidates.filter(v=>isPrime(+v)).length;
}

console.log(solution(930909,10))
profile
https://medium.com/@wooleejaan

0개의 댓글