코딩테스트/기타
[DFS] 조합 구하기 .java
머밍
2024. 11. 16. 14:02
문제
1부터 N까지 번호가 적힌 구슬이 있습니다. 이 중 M개를 뽑는 방법의 수를 출력하는 프로그 램을 작성하세요
입력
첫 번째 줄에 자연수 N(3<=N<=10)과 M(2<=M<=N) 이 주어집니다.
출력
첫 번째 줄에 결과를 출력합니다. 출력순서는 사전순으로 오름차순으로 출력합니다.
입력예제
4 2
출력예제
1 2
1 3
1 4
2 3
2 4
3 4
내 풀이
- combi 배열은 선택된 m개의 숫자를 저장하는 역할
- dfs(0, 1) 호출로 재귀를 시작 -> 여기서 0은 현재 깊이, 1은 시작 숫자
for문
- for (int i = s; i <= n; i++): s부터 n까지 반복하며 숫자를 선택. i는 선택된 숫자
- combi[L] = i: 현재 깊이에 숫자 i를 저장
- dfs(L + 1, i + 1): 깊이를 하나 증가시키고, 숫자는 i + 1부터 시작(중복 방지)
import java.util.Scanner;
public class Main {
static int[] combi;
static int n,m;
public static void dfs(int L, int s) {
if(L==m) {
for(int x : combi) System.out.print(x + " ");
System.out.println();
} else {
for(int i =s;i<=n;i++) {
combi[L] = i;
dfs(L+1,i+1);
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
combi = new int[m];
dfs(0,1);
}
}
💡💡
조합 코드는 자주 응용되기 때문에 틀을 외우자!!