/**
* 소수 찾기
* 완전 탐색
* https://programmers.co.kr/learn/courses/30/lessons/42839?language=javascript
*/
function solution(numbers) {
var answer = 0, combination = [], numSet = new Set([]);
const nums = numbers.split("");
for (let i = 1; i <= numbers.length; i++) {
combination = combination.concat(getCombinations(nums, i));
}
combination.forEach((comb) => {
getPermutations(comb).forEach((permutation) => {
numSet.add(parseInt(permutation.join("")))
});
});
numSet.forEach((num) => {
if (primeNumberChecker(parseInt(num))) answer++;
})
return answer;
}
function getPermutations(array) {
let result = [];
const permute = (arr, m = []) => {
if (arr.length === 0) {
result.push(m)
} else {
for (let i = 0; i < arr.length; i++) {
let curr = [...arr];
let next = curr.splice(i, 1);
permute([...curr], m.concat(next))
}
}
}
permute(array)
return result;
}
function getCombinations(array, selectNumber) {
const results = [];
if(selectNumber === 1){
return array.map((element) => [element]);
}
array.forEach((fixed, index, origin) => {
const rest = origin.slice(index+1);
const combinations = getCombinations(rest, selectNumber - 1);
const attached = combinations.map((combination) => [fixed, ...combination]);
results.push(...attached);
});
return results;
}
function primeNumberChecker(num) {
if (num < 2) return false;
const sqrt = Math.floor(Math.sqrt(num));
for (let i = 2; i <= sqrt; i++) {
if (num % i === 0) return false;
}
return true;
}
console.log(solution("17"));
console.log(solution("011"));
input 을 배열로 쪼갠 뒤 조합으로 뽑아낸 배열들을 각각 순열로 집어넣어 나올 수 있는 모든 경우의 숫자들을 Set 에 겹치지 않게 넣고, 해당 값들을 primeNumberChecker 에서 소수인지 여부를 확인해서 총 소수의 갯수를 return 한다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][자바스크립트][Level2] 다리를 지나는 트럭 (0) | 2022.01.03 |
---|---|
[프로그래머스][자바스크립트][Level2] 프린터 (0) | 2022.01.03 |
[프로그래머스][자바스크립트][Level1] 모의고사 (0) | 2022.01.03 |
[프로그래머스][자바스크립트][Level2] 카펫 (0) | 2022.01.03 |
[프로그래머스][자바스크립트][Level1][카카오] 숫자 문자열과 영단어 (0) | 2022.01.02 |
댓글