코딩 기록/자바스크립트 알고리즘

자바스크립트 알고리즘 - 자료구조 : 조합

kimyang-Sun 2023. 1. 29. 16:17

자바스크립트 (JavaScript)

 

자바스크립트 알고리즘 - 자료구조 : 조합에 대한 설명입니다.

 

조합이란?

순서에 상관없이 값을 구분하는 조합으로 순서가 달라져도 안에 들어간 값이 겹치면 같은 결과인 자료구조입니다.

 

설명하자면 아래에 있는 코드처럼 1,2,3,4 라는 값이 들어있는 배열을 3개를 기준으로 조합 방식으로 나열하면

[1, 2, 3]은 [2, 3, 1]과 같은 값을 가지고 있기에 순서가 달라도 둘다 [1, 2, 3] 하나로 나열되는 것 입니다.

 

아래 코드를 보면 이해하기 편하도록 주석으로 자세하게 달아뒀습니다. :)

 

console.clear();
const getCombinations = function (arr, selectNumber) {
  const results = [];
  if (selectNumber === 1) return arr.map((value) => [value]); // 1개씩 택할 때, 바로 모든 배열의 원소 return
  console.log(arr, "arr");

  arr.forEach((fixed, index, origin) => {
    console.log(fixed, "fixed");
    const rest = origin.slice(index + 1); // 해당하는 fixed를 제외한 나머지 뒤
    console.log(rest, "rest", selectNumber - 1, "selectNumber - 1");

    const combinations = getCombinations(rest, selectNumber - 1); // 나머지에 대해서 조합을 구한다.
    console.log(combinations, "combinations");

    const attached = combinations.map(combination => [fixed, ...combination]); //  돌아온 조합에 떼 놓은(fixed) 값 붙이기
    console.log(attached, "attached");

    results.push(...attached); // 배열 spread syntax 로 모두다 push
    console.log(results, "results");
  });

  return results; // 결과 담긴 results return
}

const example = [1,2,3,4];
const result = getCombinations(example, 3);
console.log(result);
// => [ [ 1, 2, 3 ], [ 1, 2, 4 ], [ 1, 3, 4 ], [ 2, 3, 4 ] ]