본문으로 바로가기

PGMS - 소수찾기

category Algorithm/PGMS 2022. 1. 13. 23:45

 

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