Practice for coding test

프로그래머스 - Level 2. k진수에서 소수 개수 구하기 / JavaScript (js)

Gray Park 2023. 3. 3. 11:30
728x90
반응형

문제설명

문제분석

이 문제는 (1) 입력값 n을 k진수로 변환해서 조건에 맞는 정수를 얻는 문제(2) 각 정수들이 소수인지 판별하여 길이를 리턴하는 문제로 나눌 수 있습니다.

 

간단한 문제이니 바로 코드를 작성해보겠습니다.

이해하기 쉽게 코드작성하기

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

function isPrimeForStrNum(strNum) {
    if(
        strNum === "" ||
        strNum === "1" ||
        strNum.includes("0") ||
        isNaN(Number(strNum))
    ) return false;
    
    const num = Number(strNum);
    
    for(let i = 2, s = Math.sqrt(num); i <= s; i++) {
        if(num % i === 0) return false;
    }
    
    return num > 1;
}

변수 numbersAfterConvertToBaseK 는 k 진수로 변환한 후 "0"을 기준으로 split한 결과, 정수들을 문자열 형태로 모아놓은 배열입니다. 이 배열의 각 요소를 함수 isPrimeForStrNum 에 넣어 소수인지 판별하고 그 길이를 리턴합니다.

 

자고로 함수는 가장 기본적인 역할만 하는 게 가장 좋습니다. 따라서 다음과 같이 수정하면 개인적으로 더 좋은 코드라고 생각합니다.

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

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

 

728x90
반응형