1 minute read

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

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

1부터 N까지 자연수 중에서 M개를 고른 수열 같은 수를 여러 번 골라도 된다.

입출력1

입력 : 3 1
출력 : 1
2
3

입출력2

입력 : 4 2
출력 : 1 1
1 2
1 3
1 4
2 1
2 2
2 3
2 4
3 1
3 2
3 3
3 4
4 1
4 2
4 3
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) { // 1, 2, 3 ...
            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;
                    recursion(k + 1); // next..
                    selected[k] = 0; // 선택
                }
            }
        }

}

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