지식의모듈화

[JS][소수]k진수에서 소수 개수 구하기 본문

PS/프로그래머스

[JS][소수]k진수에서 소수 개수 구하기

returnzero 2022. 7. 28. 01:44
function solution(n, k) {

    
    let numStr= n.toString(k);
    // console.log(numStr)
    let nums = numStr.split('0')
    // console.log(nums);
    let num=nums.map(e=>Number(e));
    num= num.filter(e=> e!==0);
    const MAX= 1000000;
    let sample=new Array(2*MAX+1).fill(true);
    sample[0]=false;
    sample[1]=false;
    let init=2;
    for( let i=2; i< sample.length;i++){
    for(let j= 2*i; j<= 2*MAX;j+=i){
        sample[j]=false;
    }
    }
    
    let answer=0;
    let res=num.filter(e=>{
        if(sample[e]){
            return e;
        }
    })

    answer=res.length
    return answer;
}

보자마자 에라토느테네스의 체를 활용해서, 비교해서 풀어야겠다는 생각을 했다. 하지만

PTSD오는 엣지케이스

이전 코테에서도 엣지케이스에 하나 걸려버렸는데.. 아마 MAX가 진수로 변환되었을때 더 큰 값이 나타날 가능성이 존재하기에 저런 출력이 나오는 것 같다. 그래서 풀이를 다음과 같이 바꿔야 한다. 

 

function solution(n, k) {
    
    let numStr= n.toString(k);
    let nums = numStr.split('0')
    let num=nums.map(e=>Number(e));
    num= num.filter(e=> e!==0);
    // console.log(num)    
    let answer=0;
    let res=num.filter(e=>{
        if(isPrime(e)){
            return e;
        }
    })
    function isPrime(n){
        if(n===1) return false;
        for(let i=2;i<=Math.floor(Math.sqrt(n));i++){
            if(n%i===0) return false;
        }
        return true;
    }
    // console.log(res);
    answer=res.length
    return answer;
}

이전 회사에서 봤던 코테의 경우에도 edge case를 통과하지 못했는데 참..

'PS > 프로그래머스' 카테고리의 다른 글

[구현][JS] 주차요금계산  (0) 2022.07.28
[구현][Javascript] 오픈채팅방  (0) 2022.07.28
[완전탐색][JS] 문자열 압축  (0) 2022.07.26
[JS][DFS]모음사전  (0) 2022.07.22
[JS]최소직사각형  (0) 2022.07.22