완전탐색, 소수찾기

김_리트리버·2020년 8월 6일
0

[알고리즘]

목록 보기
2/47
function solution(numbers) {
    var answer = 0;
    
    
    const nums = numbers.split("")
    // 분리한 숫자들을 내림차순으로 변경해서 숫자로 만듬 
    const max = Number(nums.slice().sort((x, y) => y - x).join(""))
    // 2부터 내림차순으로 생성한 숫자까지의 전체 소수를 배열로 받음 
    // ex> max=13 primeArr =[2,3,5,7,11,13]
    // 생성한 소수가 parameter 로 받은 numbers 로 만들 수 있는 수인지 확인하고 
    // 만들 수 있으면 count++
    

    const primeArr = getPrimeNumbers(max)
  
     for (const item of primeArr) {
        const arr = item.toString().split("")
        if (isTrue(arr, nums)) 
            
        {
           
            answer++
        
        }
    }
    
    
    return answer;
}

// primeNumber 의 개별숫자 ex 13 ->1,3 이 parameter 로 받은 배열에 존재하는 지 확인
const isTrue = (arr, nums) => {
    const copy = nums.slice()
    for (const item of arr) {
        const index = copy.indexOf(item)
        if (index === -1) {
            return false
        }
      // 11 때문에 splice 를 무조건 해줘야 함 
//         삭제를 안해주면 17 로 11을 만들수 있는게 되버림 
        // 17 에 1이 있으면 중복을 방지하기 위해서 1을 없애야 함 
        // 7에 1이있는지 다시 확인해야 
        copy.splice(index, 1)
    }
  // arr 에 있는 요소가 parameter 로 받은 숫자 배열에 전부 있어야 true 
  // 하나라도 없으면 false 
    return true
}

// parameter 로 받은 숫자를 내림차순 정렬로 만들고 
// 2부터 내림차순된 숫자까지의 전체 소수를 배열로 리턴 
function checkPrimeNumber(number){
  
  
  if(number===1)
  { return false;}
  
  else if(number===2)
    
  { return true;
  }
  
  else {
  
    for(let i=3; i<number; i++)
      
    {
        
      if(number%2===0)
          
          {
              return false
          }
    
      if(number%i===0)
        
      {
   
      return false 
      }
      
    }
    
  return true
  
  }
}


function getPrimeNumbers(number){

  let primeNumbers = [2];
  
  
  for(let i=3; i<=number; i++)
    
  {
   
    if(checkPrimeNumber(i))
      
    {
      primeNumbers.push(i)
    }
      
   
  }
  
return primeNumbers;
}


profile
web-developer

0개의 댓글