안녕하세요
프로그래머스 JS [소수 찾기 Lv.2]⭐⭐ n개를 선택한 순열 조합 본문
소수 찾기 문제보기
문제 설명
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
제한사항- numbers는 길이 1 이상 7 이하인 문자열입니다.
- numbers는 0~9까지 숫자만으로 이루어져 있습니다.
- "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.
"17" | 3 |
"011" | 2 |
문제 풀이 1) 순열을 이용하여 1개~n개를 선택한 순열 조합을 만듭니다. const numbersArray = [...numbers];
const 찾은소수 = new Set();
const permutation = (i, array, pick) => {
// 배열의 크기가 pick이 될 때 종료
if (i === pick) {
return;
}
for (let j = i; j < array.length; j++) {
[array[i], array[j]] = [array[j], array[i]];
permutation(i + 1, numbersArray, pick);
[array[i], array[j]] = [array[j], array[i]];
}
};
// 1개부터 numbers의 길이만큼을 고른 순열 조합 만들기
for (let pick = 1; pick <= numbers.length; pick++) {
permutation(0, numbersArray, pick);
}
2) 에라토스테네스의 체를 이용하여 순열 조합에 대해 소수 판별을 시행합니다.
if (prime(parseInt(array.slice(0, i).join("")))) {
// slice(0,i)로 pick 개의 원소를 담은 조합 구하기
찾은소수.add(parseInt(array.slice(0, i).join("")));
}
🔻🔻🔻도움이 된 글🔻🔻🔻 [javascript] 순열, 조합, 중복순열, 중복조합 |
function solution(numbers) {
const prime = (number) => {
if (number === 2) return true;
if (number === 1 || number % 2 === 0) return false;
for (let i = 3; i * i <= number; i += 2) {
if (number % i === 0) {
return false;
}
}
return true;
};
const numbersArray = [...numbers];
const 찾은소수 = new Set();
const permutation = (i, array, pick) => {
if (i === pick) {
if (prime(parseInt(array.slice(0, i).join("")))) {
찾은소수.add(parseInt(array.slice(0, i).join("")));
}
return;
}
for (let j = i; j < array.length; j++) {
[array[i], array[j]] = [array[j], array[i]];
permutation(i + 1, numbersArray, pick);
[array[i], array[j]] = [array[j], array[i]];
}
};
for (let pick = 1; pick <= numbers.length; pick++) {
permutation(0, numbersArray, pick);
}
console.log(찾은소수, "찾은소수", 찾은소수.size, "개");
return 찾은소수.size;
}
solution("1231");
|
'프로그래머스 > Lv.2' 카테고리의 다른 글
프로그래머스 JS [쿼드압축 후 개수 세기] 2^n좌표 4등분 (0) | 2022.12.14 |
---|---|
프로그래머스 JS [124 나라의 숫자] (0) | 2022.12.08 |
프로그래머스 JS [가장 큰 수]⭐ sort() 메서드로 숫자 합쳐 비교 (0) | 2022.12.06 |
프로그래머스 JS [다리를 지나는 트럭] (0) | 2022.12.06 |
프로그래머스 JS [2개 이하로 다른 비트] (0) | 2022.12.06 |