1. 문제
제한사항
- 1 ≤ n ≤ 1,000,000
- 3 ≤ k ≤ 10
입출력 예
n | k | result |
437674 | 3 | 3 |
110011 | 10 | 2 |
입출력 예 설명
입출력 예 #1
문제 예시와 같습니다.
입출력 예 #2
110011을 10진수로 바꾸면 110011입니다. 여기서 찾을 수 있는 조건에 맞는 소수는 11, 11 2개입니다. 이와 같이, 중복되는 소수를 발견하더라도 모두 따로 세어야 합니다.
2. 정답 풀이
풀이 전략
-
- toString 메서드의 radix를 사용해 n을 k진수로 변환
// 소수 판별 함수
const isPrime = (num) => {
// 약수의 대칭성 이용 Math.sqrt()메서드로 반복 횟수 절반
for (let i=2; i<=Math.sqrt(num); i++) {
if (num % i === 0) return false;
}
return true;
}
function solution(n, k) {
let answer = 0;
// 1은 소수가 아니기 때문에 필터링
const formated = n.toString(k).split('0').filter(val => +val > 1);
formated.forEach(val => {
answer += isPrime(+val) ? 1 : 0
})
return answer;
}
소수 판별 오랜만에 상기할 수 있는 문제여서 좋았다.
n진수 변환 문제가 생각보다 자주 나오는 것 같다. toString 메서드의 radix 사용해서 쉽게 풀자😄😄
'코딩 테스트 > 프로그래머스(LV2)' 카테고리의 다른 글
[프로그래머스] 땅따먹기 (LV2 - JavaScript) (3) | 2024.12.04 |
---|---|
[프로그래머스] 뒤에 있는 큰 수 찾기 (LV2 - JavaScript) (3) | 2024.12.01 |
[프로그래머스] 방문 길이 (LV2 - JavaScript) (3) | 2024.11.29 |
[프로그래머스] [3차] n진수 게임 (LV2 - JavaScript) (2) | 2024.11.28 |
[프로그래머스] [3차] 압축 (LV2 - JavaScript) (1) | 2024.11.25 |