Algorithm/Inflearn

[알고리즘/인프런] 조합 구하기

개발자 김비숑 2023. 5. 21. 13:55
반응형

문제 

1부터 N까지 번호가 적힌 구슬이 있습니다. 이 중 M개를 뽑는 방법의 수를 출력하는 프로그램을 작성하세요.

 

풀이

조합의 경우는 간단하게 아래로 가지를 뻗을 때 현재 숫자 뒤부터 확인한다고 생각하면 된다.

조합에서는 현재까지 포함한 숫자를 다음 경우를 생각할 때 모두 제외하는 것이 중요하기 때문에 DFS 함수는 각 레벨을 나타내는 L과 각 L 자리에 들어갈 요소를 모두 확인하는 for문의 시작점인 start를 매개변수로 넘겨준다.

 

즉, for문을 돌 때 초기값인 start를 넘겨주어 이전에 사용한 값을 다시 사용하지 않도록 한다.

function solution(n, r) {
  let c = Array.from({ length: r });
  let answer = [];

  function DFS(L, start) {
    if (L === r) {
      answer = [...answer, [...c]];
    } else {
      for (let i = start; i <= n; i++) {
        c[L] = i;
        DFS(L + 1, i + 1);
      }
    }
  }

  DFS(0, 1);
  return answer;
}

 

반응형