문제
https://school.programmers.co.kr/learn/courses/30/lessons/92335
설계
- 소수판별시 시간초과 방지를 위해 루트를 활용하는 방법을 사용했다. Math.sqrt(num)를 이용하여 소수판별 활용
// 소수 판별 함수
function isPrime(num) {
if (num === 2) {
return true;
}
for (let i = 2; i <= Math.floor(Math.sqrt(num)); i++) {
if (num % i === 0) {
// 한 번이라도 나누어 졌으니 소수가 아니므로 return false
return false;
}
}
// 나눠진 수가 없다면 해당 수는 소수이므로 return true
return true;
}
// main 함수
function solution(n, k) {
var answer = 0;
number = [];
// 진수 변환
while (n >= k) {
number.push(n % k);
n = parseInt(n / k);
}
// 나머지가 0보다 크다면 넣어줌
if (n > 0) {
number.push(n % k);
}
// 진수로 변환을 위해 뒤집음
number = number.reverse();
num = "";
bucket = [];
// 소수 필터링
for (let i = 0; i < number.length; i++) {
if (number[i] > 0) {
num += number[i].toString();
} else if (number[i] === 0) {
if (num !== "") {
bucket.push(parseInt(num));
num = "";
}
}
}
if (num !== "") {
bucket.push(parseInt(num));
}
// 소수 판별
bucket.forEach((element) => {
if (element >= 2 && isPrime(element)) {
answer += 1;
}
});
return answer;
}
'PS (Problem Solving) > Programmers' 카테고리의 다른 글
[프로그래머스] JadenCase 문자열 만들기 (0) | 2022.10.14 |
---|---|
[프로그래머스] 최댓값과 최솟값 (0) | 2022.10.13 |
[프로그래머스] 주차 요금 계산 (0) | 2022.09.16 |
[프로그래머스] 두 큐 합 같게 만들기 (0) | 2022.09.13 |
[프로그래머스] 게임 맵 최단거리 (0) | 2022.08.24 |