문제
자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
- 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열
- 고른 수열은 오름차순이어야 한다.
입력
첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)
출력
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
수열은 사전 순으로 증가하는 순서로 출력해야 한다.
예제 입출력
풀이
https://rookie-programmer.tistory.com/106
이전에 풀어본 적 있던 문제
DFS는 그림을 그리면서 어떻게 호출되는지 파악하면 머릿속으로 정리가 잘 되는 것 같다.
다음 DFS를 호출할 때 start 값을 지정함으로써 중복되는 숫자가 없게 만드는 것이 포인트다 !
combi배열에는 L값으로 숫자를 넣어주면 된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N, M;
static int[] combi;
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(bf.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
combi = new int[M];
DFS(0, 1);
}
public static void DFS(int L, int start){
if(L==M) {
for(int num : combi) {
System.out.print(num + " ");
}
System.out.println();
}
else {
for (int i = start; i <= N; i++) {
combi[L]=i;
DFS(L+1, i+1);
}
}
}
}
'Algorithm > 백준' 카테고리의 다른 글
[백준/JAVA] 🥇 10026번 적록색약 (0) | 2023.12.15 |
---|---|
[백준/JAVA] 🥈 16953번 A → B (0) | 2023.12.15 |
[백준/JAVA] 🥈 2644번 촌수계산 (0) | 2023.12.10 |
[백준/JAVA] 🥈 7562번 나이트의 이동 (1) | 2023.12.10 |
[백준/JAVA] 🥈 2667번 단지번호붙이기 (1) | 2023.12.06 |