반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 자료구조
- 티스토리챌린지
- 자바스크립트 배열
- binary search
- Javascript sort
- 타입스크립트
- 정렬 알고리즘
- 자바스크립트 알고리즘
- TS
- 깃허브
- TypeScript
- 알고리즘
- 프로그래머스 자바스크립트
- js 알고리즘
- mysql스키마
- 프로그래머스 자바스크립트 풀이
- 자바스크립트 정렬
- 프로그래머스
- MySQL
- 좌표거리구하기
- JavaScript
- 맨해튼거리
- 맨해튼거리예제
- 오블완
- 정규표현식문제
- 프로그래머스 신규아이디추천
- node.js
- Javascript 정렬
- next.js
- 키패드누르기풀이
Archives
- Today
- Total
FE PARADISE
프로그래머스 k진수에서 소수 개수 구하기 - 자바스크립트 풀이 본문
반응형
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
437674을 3진수로 바꾸면 211020101011입니다. 여기서 찾을 수 있는 조건에 맞는 소수는 왼쪽부터 순서대로 211, 2, 11이 있으며, 총 3개입니다. (211, 2, 11을 k진법으로 보았을 때가 아닌, 10진법으로 보았을 때 소수여야 한다는 점에 주의합니다.) 211은 P0 형태에서 찾을 수 있으며, 2는 0P0에서, 11은 0P에서 찾을 수 있습니다.
정수 n과 k가 매개변수로 주어집니다. n을 k진수로 바꿨을 때, 변환된 수 안에서 찾을 수 있는 위 조건에 맞는 소수의 개수를 return 하도록 solution 함수를 완성해 주세요.
코드
function isPrime(num){
let number = parseInt(num, 10);
if(number < 2) return false;
for(let i = 2; i * i <= number; i++){
if(number % i === 0) return false;
}
return true;
}
function solution(n, k) {
let converted = n.toString(k);
let split = converted.split("0").filter(x => x.length > 0);
return split.reduce((a,c) => a += isPrime(c) ,0);
}
간단 설명
소수인지 아닌지 판별하는 함수부터 작성해보자.
function isPrime(num){
let number = parseInt(num, 10); // 10진수로 변환
if(number < 2) return false;
for(let i = 2; i * i <= number; i++){
if(number % i === 0) return false; // 자기 자신, 1 이외에 나눠떨어지는 값이 있으면 소수가 X
}
return true;
}
우선 문제 조건에 따라 인자로 받아온 num 값을 10진수로 변환 후 소수인지 아닌지 판별해야하므로
let number = parseInt(num, 10);
if(number < 2) return false;
이와 같이 10진수로 변환해준 값을 number 변수에 할당한다. 이 때, 2보다 작은 1과 같은 수는 소수가 아니므로 바로 false를 반환해주자.
이제 소수인지 아닌지 판별해보자.
for(let i = 2; i * i <= number; i++){
if(number % i === 0) return false;
}
return true;
자기 자신과 1을 제외한 값 중 나눠떨어지는 값이 있다면 false를 반환해주자. for문을 실행한 결과 나누어 떨어지는 값을 찾지 못했다면 소수인 것이므로 true를 반환하게된다.
이제 조건에 맞는 값을 찾아 개수를 구하자.
function solution(n, k) { // 예제: n = 437674, k = 3
let converted = n.toString(k);
let split = converted.split("0").filter(x => x.length > 0);
return split.reduce((a,c) => a += isPrime(c) ,0);
}
우선 인자 n 값을 k진수로 변환하자.
let converted = n.toString(k); // 211020101011
이제 0을 기준으로 split을 이용하여 판별할 값들을 담는 배열 변수를 만들자.
let split = converted.split("0").filter(x => x.length > 0);
// [ '211', '2', '1', '1', '11' ]
split 배열의 요소들을 하나씩 돌며 소수인지 판별한다. 소수라면 +1을 해준다. 아래와 같이 reduce를 사용해 간단하게 표현하였다.
return split.reduce((a,c) => a += isPrime(c) ,0);
이 후 이 값을 반환하면 끝이다.
반응형
'자료구조 & 알고리즘' 카테고리의 다른 글
[자료구조] 힙 Heap - 자바스크립트로 구현하기 (0) | 2025.04.13 |
---|---|
프로그래머스 뒷 큰수 스택 풀이 - 자바스크립트 풀이 (0) | 2025.03.08 |
프로그래머스 [1차] 캐시 - 자바스크립트 코드 (0) | 2025.02.17 |
프로그래머스 피로도(완전 탐색) - 자바스크립트 풀이 (0) | 2025.02.09 |
프로그래머스 - 괄호 회전하기 ( 자바스크립트 코드 & 풀이 ) (0) | 2025.01.12 |