Algorithm

중복순열 구하기

choogro 2022. 6. 27. 11:25

문제설명

1부터 N까지 번호가 적힌 구슬이 있습니다. 이 중 중복을 허락하여 M번을 뽑아 일렬로 나열 하는 방법을 모두 출력합니다.

 

이 문제는 M번이 상수로 주어질 경우 다중 for문을 이용하여 쉽게 구할 수 있다. 하지만 지금처럼 몇번 뽑아야하는지 모를 때는 일일이 다중 for문의 변수를 i,j,k, ... 이런식으로 늘려줄 수가 없기에 재귀함수를 이용하여 M번의 레벨에서 멈추게 해주면 쉽게 구현할 수 있다.

function solution(n, m) {
  let answer = 0;
  function DFS(L) {
    if (L === m) {
      answer++;
    } else {
      for (let i = 1; i <= n; i++) {
        DFS(L + 1);
      }
    }
  }
  DFS(0);
  return answer;
}