반응형
문제
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;
}
반응형
'Algorithm > Inflearn' 카테고리의 다른 글
[알고리즘/인프런] 경로 탐색(인접행렬) (0) | 2023.05.21 |
---|---|
[알고리즘/인프런] 수들의 조합 (1) | 2023.05.21 |
[알고리즘/인프런] 수열 추측하기(순열, 이항계수) (1) | 2023.05.21 |
[알고리즘/인프런] 조합의 경우의 수(메모이제이션) (0) | 2023.05.21 |
[알고리즘/인프런] 팩토리얼 (0) | 2023.05.21 |