코딩테스트 연습 - 소수 찾기 | 프로그래머스 (programmers.co.kr)
코딩테스트 연습 - 소수 찾기
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이
programmers.co.kr
접근 : bf, 순열, set
해당 문제를 통해 순열, 조합을 다시 한번 구현해볼수 있었고 set에 대해서도 한번더 확인할 수 있는 좋은 문제였다.
순열
// 순열
function Permutation(arr, r) {
const result = [];
if (r === 1) return arr.map((num) => [num]);
arr.forEach((fixed, index, org) => {
const rest = [...org.slice(0, index), ...org.slice(index + 1)];
const permutation = Permutation(rest, r - 1);
const attached = permutation.map((numbers) => [fixed, ...numbers]);
result.push(...attached);
});
return result;
}
//전체 순열
function GetAllPermutation (arr){
const results=[];
arr.forEach((value,index,origin)=>{
results.push(...Permutation(origin,index+1));
});
return results;
}
조합
function Combination(arr, r) {
const result = [];
if (r === 1) return arr.map((num) => [num]);
arr.forEach((fixed, index, org) => {
const rest = org.slice(index+1);
const combinations = Combination(rest, r - 1);
const attached = permutation.map((numbers) => [fixed, ...numbers]);
result.push(...attached);
});
return result;
}
Javascript
function solution(numbers) {
var answer = 0;
numbers= numbers.split("");
let arr = GetAllPermutation(numbers);
let permutationArr = [];
for(let i=0;i<arr.length;i++){
let temp = +arr[i].join("");
permutationArr.push(temp);
}
let setArr = [...new Set(permutationArr)];
for(let i=0;i<setArr.length;i++){
let tmp = setArr[i];
if(isPrime(tmp)){
answer++;
} else {
continue;
}
}
return answer;
}
function Permutation(arr, r) {
const result = [];
if (r === 1) return arr.map((num) => [num]);
arr.forEach((fixed, index, org) => {
const rest = [...org.slice(0, index), ...org.slice(index + 1)];
const permutation = Permutation(rest, r - 1);
const attached = permutation.map((numbers) => [fixed, ...numbers]);
result.push(...attached);
});
return result;
}
function GetAllPermutation (arr){
const results=[];
arr.forEach((value,index,origin)=>{
results.push(...Permutation(origin,index+1));
});
return results;
}
function isPrime (num){
if(!num||num===1) return false;
for(let i=2;i<=Math.sqrt(num);i++){
if(num%i===0) return false;
}
return true;
}
'코딩테스트(알고리즘) > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 가장 큰 수 (Javascript) (0) | 2022.06.21 |
---|---|
[프로그래머스] 카펫 (Javascript) (0) | 2022.06.21 |
[프로그래머스] 위장 (Javascript) (0) | 2022.06.20 |
[프로그래머스] 수식 최대화 (Javascript) (0) | 2022.06.20 |
[프로그래머스] 행렬의 곱셈 (Javascript) (0) | 2022.06.18 |