1 minute read

https://www.acmicpc.net/problem/15652

자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.

  • 1부터 N까지 자연수 중에서 M개를 고른 수열
  • 같은 수를 여러 번 골라도 된다.
  • 고른 수열은 비내림차순이어야 한다. (길이가 K인 수열 A가 A1 ≤ A2 ≤ … ≤ AK-1 ≤ AK를 만족하면, 비내림차순이라고 한다.)

입출력1

입력 : 3 1
출력 : 1
2
3

입출력2

입력 : 4 2
출력 :
1 1
1 2
1 3
1 4
2 2
2 3
2 4
3 3
3 4
4 4

  • 중복 가능
  • N개 중에 M개 뽑기
  • 비 내림차순(오른쪽으로 갈 수록 점점 커지는) 조건 추가 ``` import java.util.Scanner;

public class Main{ static int N, M; static int[] selected; static StringBuilder sb = new StringBuilder();

    public static void main(String[] args){
        input();
        recursion(1);
        System.out.println(sb.toString());
    }
    public static void input(){
        Scanner sc = new Scanner(System.in);
        N = sc.nextInt();
        M = sc.nextInt();
        selected = new int[M+1];
    }

    public static void recursion(int k) {
        if(k == M+1) {
            for(int i=1; i<=M; i++) {
                sb.append(selected[i]).append(' ');
            }
            sb.append('\n');
        } else {
            for(int cand=1; cand<=N; cand++) {
                selected[k] = cand;
                if(selected[k-1] <= selected[k]) { // 여기서 이전보다 작은 값이 아니면 재귀 실행하도록 하면 된다.
                    recursion(k+1);
                }
            }
        }
    }

} ``` 참고 : 한 번에 끝내는 코딩테스트 369 Java편 초격차 패키지 Online part3