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;
}
반응형