ALGORITHM
백준 15650 N과 M (2) (Java)
공부하는_다온
2023. 2. 10. 21:54
1. 문제 링크
15650번: N과 M (2)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
2. 문제 및 입출력예제
3. 문제 풀이
N과 M 문제를 조금만 바꾸면 된다.
카운트를 하는 c와 시작 값인 s를 이용해서 조합하면 된다.
4. 코드
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
private static StringBuilder sb = new StringBuilder();
private static int N;
private static int M;
private static int[] input;
private static int[] numbers;
private static boolean[] isSelected;
private static ArrayList<int[]> list = new ArrayList<>();
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
M = sc.nextInt();
input = new int[N];
numbers = new int[M];
isSelected = new boolean[N+1];
for(int i=0;i<N;i++) {
input[i] = i+1;
}
permutation(0, 1);
for(int[] numbers : list) {
for(int i=0;i<numbers.length;i++) {
sb.append(numbers[i]+" ");
}
sb.append("\n");
}
System.out.println(sb);
sc.close();
}
private static void permutation(int c, int s) {
if(c == M) {
list.add(Arrays.copyOfRange(numbers, 0, numbers.length));
return;
}
for(int i=s;i<=N;i++) {
numbers[c] = i;
permutation(c+1, i+1);
}
}
}