순열

확률 및 통계학

2020-12-18

서로 다른 n개의 원소에서 r개를 중복을 허용하지 않고 선택하여 순서 있게 늘어 놓은 것

const getPermutations = (arr, selectNumber) => {
  const results = [];

  if (selectNumber === 1) return arr.map(value => [value]);
  arr.forEach((fixed, index, origin) => {
    const rest = [...origin.slice(0, index), ...origin.slice(index + 1)];
    const combinations = getPermutations(rest, selectNumber - 1);
    const attached = combinations.map(combination => [fixed, ...combination]);
    results.push(...attached);
  });

  return results;
};

입력

const arr = [1, 2, 3, 4, 5];

const selectNumber = 2;

출력

[1, 2]

[1, 3]

[1, 4]

[1, 5]

[2, 1]

[2, 3]

[2, 4]

[2, 5]

[3, 1]

[3, 2]

[3, 4]

[3, 5]

[4, 1]

[4, 2]

[4, 3]

[4, 5]

[5, 1]

[5, 2]

[5, 3]

[5, 4]