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
반응형
'Practice for coding test' 카테고리의 다른 글
프로그래머스 - Level 2. 유사 칸토어 비트열 / JavaScript (js) (0) | 2023.03.05 |
---|---|
프로그래머스 - Level 2. 2개 이하로 다른 비트 / JavaScript (js) (0) | 2023.03.04 |
프로그래머스 - Level 2. [1차] 뉴스 클러스터링 / JavaScript (js) (0) | 2023.03.02 |
프로그래머스 - Level 2. 스킬트리 / JavaScript (js) (0) | 2023.03.01 |
프로그래머스 - Level 2. [1차] 캐시 / JavaScript (js) (0) | 2023.02.28 |