순열,조합,중복순열 템플릿 [TIL 2021.09.01]

JUNGHUN KIM·2021년 9월 1일
0
post-custom-banner

😊Today Learn

  • 순열, 조합, 중복순열 관련 템플릿의 코드를 하나씩 뜯어가며 분석.
  • 순열,조합,부분순열이 어느 경우에 사용되는지에 대해 case공부
  • 시간복잡도를 계산하여 알고리즘을 푸는 방법을 고민

템플릿

아래 순열,조합,중복순열을 보면 모든 로직이 다 같지만 next만 로직이 다르다는것을 알 수 있음.
단순히 템플릿을 사용하지말고, 어느 경우에 어떤 것을 사용하는지 확인이 필요

순열

const getPermutations = function (arr, selectNumber) {
  const results = [];
  if (selectNumber === 1) return arr.map((e) => [e]); 

  arr.forEach((fixed, index) => {
  const next = [...arr.slice(0, index), ...arr.slice(index+1)] 
  const permutations = getPermutations(next, selectNumber - 1); 
  const result = permutations.map((e) => [fixed, ...e]); 
  results.push(...result); 
  });

  return results;
}

조합

const getCombinations = function (arr, selectNumber) {
  const results = [];
  if (selectNumber === 1) return arr.map((e) => [e]); 
  
  arr.forEach((fixed, index) => {
  const next = arr.slice(index + 1);
  const combinations = getCombinations(next, selectNumber - 1); 
  const result = combinations.map((e) => [fixed, ...e]);
  results.push(...result); 
  });
  return results; 
}

중복순열

const getPermutations = function (arr, selectNumber) {
  const results = [];
  if (selectNumber === 1) return arr.map((e) => [e]); 

  arr.forEach((fixed, index) => {
  const permutations = getPermutations(arr, selectNumber - 1); 
  const result = permutations.map((e) => [fixed, ...e]); 
  results.push(...result);
  });
  return results; 
}
profile
개발자가 되고 싶은 일문학도
post-custom-banner

0개의 댓글