https://programmers.co.kr/learn/courses/30/lessons/42839
코딩테스트 연습 - 소수 찾기
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이
programmers.co.kr
function solution(numbers) {
var answer = 0;
let temp = numbers.split('');
let combin = [];
for(let i = 1; i <= temp.length; i++){
com(temp,i).forEach(item=>{
combin.push([...item]);
})
}
let numArr = combin.map(item=>{
return Number(item.join(''));
});
let newnumArr= numArr.filter((item,i)=>{
return numArr.indexOf(item)===i;
});
newnumArr.forEach((k)=>{
let flag = 1;
if(k>=2){
for(let i = 2; i <=Math.sqrt(k); i++){
if(k%i==0){
flag = 0;
break;
}
}
if(flag==1){
answer++;
}
}
})
return answer;
function com(arr, k){
let s = [];
if(k==1)
return [...arr];
arr.forEach((item,i)=>{
let fixed = item;
let rest = [...arr.slice(0,i), ...arr.slice(i+1)];
let restArr = com(rest,k-1);
let newArr = restArr.map((item1)=>[...fixed, ...item1]);
newArr.forEach(k=>s.push(k));
})
return s;
}
}
1. 순열을 구해서
2. 소수 판별을 한다
라는 단순한 논리로 구현하였다.
순열 구하는 로직이 정말 쏠쏠하게 쓰이는 것 같다.
'Algorithm > PGMS' 카테고리의 다른 글
| PGMS - 아이템줍기 (0) | 2022.01.17 |
|---|---|
| PGMS - 피로도 (0) | 2022.01.14 |
| PGMS 점프와 순간이동 (0) | 2022.01.10 |
| PGMS 캐시 (0) | 2022.01.10 |
| PGMS 전력망을 둘로 나누기 (0) | 2022.01.10 |
