728x90
문제
풀이
function solution(numbers) {
let answer = 0;
let allPermutations = []; // 모든 경우의 수 [순열]
let permutationsSet = []; // 중복을 제거한 경우의 수
// 1. 숫자 조합 순열 구하기
allPermutations = getAllPermutations([...numbers]);
// 2. 중복제거
permutationsSet = getPermutationsSet(allPermutations)
// 3. 소수 갯수 구하기
answer = getCountDicimal([...new Set(permutationsSet)]);
return answer;
}
// 1. 숫자 조합 순열 구하기
function getAllPermutations(numbers) {
let results = [];
function getPermutations(arr, selectNumber) {
const perm = [];
if (selectNumber === 1) return arr.map((el) => [el]);
arr.forEach((fixed, index, origin) => {
const rest = [...origin.slice(0, index), ...origin.slice(index+1)]
const permutations = getPermutations(rest, selectNumber - 1);
const attached = permutations.map((el) => [fixed, ...el]);
perm.push(...attached);
});
return perm;
}
for(let i=1; i<=numbers.length; i++) {
const perm = getPermutations(numbers, i);
const permToString = perm.map((el) => el.join(''))
results.push(...permToString);
}
return results;
}
// 2. 중복제거
function getPermutationsSet(permutations) {
let result;
result = [...new Set(permutations)];
result = result.filter((el) => el > 1).map((el) => Number(el));
result = [...new Set(result)];
return result;
}
// 3. 소수 갯수 구하기 arr ex) ['1', '7', '17', '71']
function getCountDicimal(arr) {
let count = 0;
function isDicimal(number) { // ex) '71'
for(let i=2; i*i<=number; i++) {
if (0 === number%i) {
return 0;
}
}
return 1;
}
for(let i=0; i<arr.length; i++) {
count += Number(isDicimal(arr[i]));
}
return count;
}
채점 결과
728x90
'Study Note > Algorithm' 카테고리의 다른 글
프로그래머스 #탐욕법(Greedy) - 체육복 lv1 (2) | 2021.09.12 |
---|---|
프로그래머스 #정렬 - H-Index lv2 (0) | 2021.09.12 |
프로그래머스 #스택/큐 - 프린터 lv2 (0) | 2021.09.10 |
프로그래머스 #정렬 - 가장 큰 수 lv2 (0) | 2021.01.23 |
프로그래머스 #데모 테스트 - 직사각형 마지막 한점 좌표 구하기 (0) | 2021.01.22 |
댓글