문제
https://programmers.co.kr/learn/courses/30/lessons/92335
걸린 시간
-
풀이
JavaScript
function solution(n, k) {
// 소수 판별
const isPrime = (num) => {
if(num === 1) return false;
for(let i = 2; i*i <= num; i++){
if(Math.floor(num%i) === 0) return false;
}
return true;
}
// k진수 변환
let s = '';
while(n !== 0){
s = Math.floor(n%k) + s;
n = Math.floor(n/k);
}
// 개수 세기
let ans = 0;
for(let d of s.split('0')){
if(d === '') continue;
if(isPrime(parseInt(d))) ans++;
}
return ans;
}
소수를 보고 반사적으로 에라토스테네스의 체를 이용하여 소수를 판별하려고 했는데 틀린 테케가 있어 잘 생각해보니, n 보다 큰 수를 판별해야 하는 경우도 있었다. (예를 들어 3진수로 1111111 인 수는 고작 1093)
놓친 부분
- 소수 판별 시 1의 처리
- 공백 요소의 예외 처리
항상 까먹는 것들
- 소수 판별 알고리즘
- 진수 변환 방법
- javascript 의 number 자료형은 정수 계산을 위해선 Math.floor 로 내림을 해 주어야 한다.
- string to number 은 parseInt 이다.
진수 변환
let s = '';
while(n !== 0){
s = Math.floor(n%k) + s;
n = Math.floor(n/k);
}
위 알고리즘을
let s = n.toString(k);
number 자료형 내장 함수인 toString() 를 이용하여 한번에 구할수도 있다.
console.log(parseInt(s, k)); // k진수 -> 10진수
반대로 parseInt 함수를 이용하면 k진수에서 10진수 변환도 쉽게할 수 있다. (10진수 문자열만 number 자료형으로 변환할 수 있는게 아녔다.)
'programmers' 카테고리의 다른 글
programmers Level 2 양궁대회 (0) | 2022.04.26 |
---|---|
programmers Level 2 주차 요금 계산 (0) | 2022.04.24 |
programmers Level 2 순위 검색 (0) | 2021.09.18 |
programmers Level 3 모두 0으로 만들기 (0) | 2021.04.16 |
programmers Level 4 무지의 먹방 라이브 (1) | 2020.12.06 |
댓글