[프로그래머스] k진수에서 소수 개수 구하기
코딩테스트 연습 - k진수에서 소수 개수 구하기
2022 KAKAO BLIND RECRUITMENT
LEVEL 2
문제설명
양의 정수 n
을 k
진수로 바꾸었을 때 다음 조건을 만족하는 소수(P
)의 개수를 구하는 solution
함수를 작성하시오.
0P0
: 소수 양쪽에 0이 있는 경우P0
: 소수 오른쪽에만 0이 있고 왼쪽에는 아무것도 없는 경우0P
: 소수 왼쪽에만 0이 있고 오른쪽에는 아무것도 없는 경우P
: 소수 양쪽에 아무것도 없는 경우- 단,
P
는 각 자릿수에 0을 포함하지 않는 소수 (P
는 십진법으로 보아야 함)
INPUT
n
- 양의 정수
- 1 ≤
n
≤ 1,000,000
k
- 양의 정수
- 3 ≤
k
≤ 10
OUTPUT
n
을k
진수로 바꾸었을 때, 주어진 조건을 만족하는 소수의 개수 (0이상의 정수)
나의 풀이
toString
을 사용해n
을k
진수로 변환한 문자열nStr
을 만든다.nStr
을 0으로split
한 후 각 요소를 10진법 숫자로 바꾼 배열nArr
을 만든다.- 빈 문자열 (
''
)은filter
를 사용해 배열에서 제거한다.
- 빈 문자열 (
nArr
의 요소들 중 소수인 요소들의 개수를count
에 담은 뒤return
한다.- 인자로 주어진 정수가 소수인지 아닌지 판별하는 함수
isPrime
을 작성한다.
- 인자로 주어진 정수가 소수인지 아닌지 판별하는 함수
function solution(n, k) {
// 1. nStr : toString을 사용해 n을 k진수로 변환한 문자열
const nStr = n.toString(k);
// 2. nArr : nStr을 0으로 split한 후 각 요소를 10진법 숫자로 바꾼 배열
const nArr = nStr.split('0').filter(el => el.length !== 0).map(el => parseInt(el, 10));
// 3. count : nArr의 요소들 중 소수인 요소들의 개수
const count = nArr.filter(el => isPrime(el)).length;
return count;
}
// isPrime : 소수인지 아닌지 판별하는 함수 (n은 정수)
function isPrime(n) {
if (n <= 1) return false; // 0, 1은 소수가 아님
if (n === 2 || n === 3) return true; // 2, 3는 소수
if (n % 2 === 0) return false; // 2를 제외한 짝수는 소수가 아님
for (let i = 3, m = Math.sqrt(n); i <= m; i += 2) {
// 3 ~ Math.sqrt(n) 까지의 홀수들로 n을 나누어 나누어 떨어지는지 확인
if (n % i === 0) return false;
}
// for문이 끝날때까지 return false되지 않았다면 소수
return true;
}
Author And Source
이 문제에 관하여([프로그래머스] k진수에서 소수 개수 구하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@alexjlee/프로그래머스-k진수에서-소수-개수-구하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)