알고리즘 문제 풀기

프로그래머스 : 소수 찾기 - javascript(완전탐색, 소수 판별)

Fo_rdang 2024. 9. 29. 14:09
반응형

문제 출처 

https://school.programmers.co.kr/learn/courses/30/lessons/42839?language=javascript

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

정답 풀이 

아래 두개의 함수를 작성하면 된다 

 

numbers로 순열을 구하는 함수  

해당 숫자가 소수인지 확인하는 함수 

 

정답 코드 

function solution(numbers) {
    let answer = new Set()
    for(let i=1; i<=numbers.length; i++){
        let arr = numbers.split('')
       let candidates =  getPermutation(arr, i)
       let format = candidates.map(el => el.join(''))
       let prime = check(format)
       prime.forEach(el => answer.add(el))
       }
   return answer.size
}

//들어온 문자열 배열 중에 
//-앞에 0 빼고 
//-소수라면 해당 배열로 넣기 

const check = (arr) => {
    let result = []; 
    arr = arr.map(v => +v)
    for(let i=0; i<arr.length; i++){
        if(isPrime(arr[i])) result.push(arr[i])
    }
    return result
}
    
 const isPrime = (num) => {
     if(num === 0 || num === 1) return false; 
     else if(num === 2 || num === 3) return true; 
     else if(num%2 === 0) return false 
     for(let i=3; i<= Math.sqrt(num); i+=2){
         if(num%i === 0) return false; 
     }
     return true; 
 }   
const getPermutation = (arr, selectNum) => {
       let results = [];
       if(selectNum === 1)return arr.map(v => [v])
       
       arr.forEach((fixed, idx, origin) => {
           const rest = [...origin.slice(0,idx), ...origin.slice(idx+1)]
           const permutations = getPermutation(rest, selectNum - 1)
           const attached = permutations.map(permu => [fixed, ...permu])
           results.push(...attached)
       })
       return results; 
   }

//소수 판별 함수 
//순열 함수
반응형