[순열]치킨소스레시피

이영광·2021년 8월 30일
0

알고리즘

목록 보기
15/16

순열같은경우 중복이 되면 안되기 떄문에

중복순열과 비슷한 알고리즘이지만

얕은카피를 해와서 기준이 되는 요소를 스플라이슬를해줘서 다시 중복이 되지않게 해주는 방향으로 알고리즘을 짠다

  • 개업 이래로 항상 승승장구하는 '승승장구 치킨집'의 비결은 소스에 있다. 수많은 타사 브랜드 치킨집들이 승승장구 치킨집의 소스 비결을 알아내려고 했으나 빈번히 포기했다.
    그 이유는 5대째 내려오는 '비밀의 승승장구 치킨 소스 비율 레시피'는 70억 인구 중 사장님만 알고 있기 때문이다. 최근, 누리꾼 사이에서 이 레시피의 일부분을 발췌했다는 소문을 듣게 되었다.
    그 소문은 다음과 같다.

N 가지의 재료 중에 단 M 가지만을 사용하여 조합한 모든 경우의 수 중 하나이다.
재료는 0과 1로만 이루어진 숫자로 암호화가 되어 있고, 항상 1로 시작하며 복호화를 할 수 없다.
단, 0이 3개 이상인 재료는 상한 재료이기 때문에 제외한다.
재료의 순서에 따라 맛이 달라지기 때문에, 재료를 넣는 순서가 다르다면 다른 레시피이다.
이 소문을 참고하여 '비밀의 승승장구 치킨 소스'가 될 수 있는 경우의 수를 모두 반환하는 함수를 작성하세요.


입출력 예시
const output1 = newChickenRecipe([1, 10, 1100, 1111], 2);
console.log(output1);
/*
  [
    [1, 10], [1, 1100], [1, 1111],
    [10, 1], [10, 1100], [10, 1111],
    [1100, 1], [1100, 10], [1100, 1111],
    [1111, 1], [1111, 10], [1111, 1100]
  ];
*/

const output2 = newChickenRecipe([10000, 10, 1], 3);
console.log(output2); // []

const output3 = newChickenRecipe([11, 1, 10, 1111111111, 10000], 4);
console.log(output3);
/* 
  [
    [1, 10, 11, 1111111111],
    [1, 10, 1111111111, 11],
    [1, 11, 10, 1111111111],
    [1, 11, 1111111111, 10],
    [1, 1111111111, 10, 11],
    [1, 1111111111, 11, 10],
    [10, 1, 11, 1111111111],
    [10, 1, 1111111111, 11],
    [10, 11, 1, 1111111111],
    [10, 11, 1111111111, 1],
    [10, 1111111111, 1, 11],
    [10, 1111111111, 11, 1],
    [11, 1, 10, 1111111111],
    [11, 1, 1111111111, 10],
    [11, 10, 1, 1111111111],
    [11, 10, 1111111111, 1],
    [11, 1111111111, 1, 10],
    [11, 1111111111, 10, 1],
    [1111111111, 1, 10, 11],
    [1111111111, 1, 11, 10],
    [1111111111, 10, 1, 11],
    [1111111111, 10, 11, 1],
    [1111111111, 11, 1, 10],
    [1111111111, 11, 10, 1],
  ]
*/
function newChickenRecipo(stuffArr, choiceNum){
	
  let fresh = []
  
  for(let n = 0 ; n<stuffArr.length ; n++){
  		
    	const element = String(stuffArr[n]
             .split("")
             .filter((el)=> el === "0")
            if(element.length<3){
        	 fresh.push(stuffArr[n]
        	} 
         }
    	
    	fresh.sort((a,b)=>a-b)
    
    const newRecipe = []
    
    const aux = (arr,bucket,num)=>{
    	
      	if(num === 0){
       	  newRecipe.push(bucket)
          return
        }
      	
      	for(let n= 0 ; n<arr.length ; n++){
        
        	const pick = arr[n]
            const shallowCopy = arr.slice()
             shallowCopy.splice(n,1)
          aux(shallowCopy,bucket.concat(pick),num-1)
        }    		
    }
     	aux(fresh,[],choiceNum)
    return newRecipe
}


profile
《REACT》《JAVASCRIPT 》 만지고있어욤

0개의 댓글