최대 공약수
function gcd (a,b){
   if(a%b === 0){
      return b
   }
   return gcd (b, a%b)
순열
function rockPaperScissors (rounds) {
  let rps = ['rock', 'paper', 'scissors']
  let outcomes = [];
  rounds = rounds || 3;
  
  // 재귀함수를 만든다.
  let permutate = function (temp, rounds){
    // 재귀함수 종료 조건
    if(rounds === 0){
      outcomes.push(temp)
      return
    }
   
   // 재귀함수 실행문
    for(let i=0; i < rps.length; i++){
      permutate(temp.concat(rps[i]), rounds-1)
    }
  }
  
  // 재귀함수 실제 실행
  permutate([], rounds)
  return outcomes
};
function newChickenRecipe(stuffArr, choiceNum) {
  // 결과물 변수를 만든다.
  let result = []
  
  // 000 이 3개 이상인 요소를 필터링한다.
  function checked (num){
    let count = 0;
    let arr = String(num).split('')
    for(let i=0 ; i < arr.length; i++){
      if(arr[i] === '0'){
        count++
      }
    }
    if(count >=3) {
      return false
    }else {
      return true
    }
  }
  
  let filterStuffArr = stuffArr.filter(checked)
  // 오름차순으로 정렬한다.
  filterStuffArr.sort((a,b)=>a-b)
  // 특이 케이스 처리한다.
  if(filterStuffArr.length === 0 || filterStuffArr.length < choiceNum){
    return result
  }
  
  // 순열 함수를 새로 만든다.
  function permutate (arr, temp, num){
    if(num === 0){
      result.push(temp)
      return
    }
	
    // 중복 요소를 없애기 위하여 새로운 배열을 만들어 재귀함수 돌린다.
    for(let i=0; i < arr.length; i++){
      let choice = arr[i]
      let sliceArr = arr.slice()
      sliceArr.splice(i,1)
      permutate(sliceArr, temp.concat(choice), num-1)
    }
  }
  // 순열 함수를 실행한다.
  permutate(filterStuffArr, [], choiceNum)
  // 결과물 변수를 리턴한다.
  return result
}