중복순열 구하기
문제
문제
1부터 N까지 번호가 적힌 구슬이 있습니다. 이 중 중복을 허락하여 M번을 뽑아 일렬로 나열 하는 방법을 모두 출력합니다.
입력
첫 번째 줄에 자연수 N(3<=N<=10)과 M(2<=M<=N) 이 주어집니다.
출력
첫 번째 줄에 결과를 출력합니다. 출력순서는 사전순으로 오름차순으로 출력합니다.
입력예제 1
32
출력예제 1
11
12
13
21
22
23
31
32
33
해결방법

- 중복 순열 구할 때, 해당 레벨에서 나머지 원소 부분집합을 다 만들어야 함.
 - 따라서, 그림과 코드 처럼 한 레벨에서 나머지 부분집합을 다 찾기 위해 반복문을 통해 내부에서 DFS 재귀호출을 함.
 
코드
import java.util.Scanner;
public class Main {
    static int[] pm;
    static int n, m;
    public void DFS(int L) {
        if (L == m) {
            for (int x : pm) System.out.print(x + " ");
            System.out.println();
        } else {
            for (int i = 1; i <= n; i++) {
                pm[L] = i; // 그림 참고
                DFS(L + 1);
            }
        }
    }
    public static void main(String[] args) {
        Main cls = new Main();
        Scanner kb = new Scanner(System.in);
        n = kb.nextInt();
        m = kb.nextInt();
        pm = new int[m];
        cls.DFS(0);
    }
}