Algorithm

백준 15651 N과 M (3)

dalooong 2023. 7. 19. 09:26
 

15651번: N과 M (3)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

문제 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class boj15651 {
    private int n;
    private int m;
    // 실제로 만든 중복 순열을 담기위한 배열
    private int[] arr;
    // 정답을 저장할 StringBuilder
    private StringBuilder answer;

    public void solution() throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer infoToken = new StringTokenizer(reader.readLine());
        // n과 m 입력
        n = Integer.parseInt(infoToken.nextToken());
        m = Integer.parseInt(infoToken.nextToken());
        // 순열 저장용 배열 생성
        arr = new int[m];
        // 정답 저장용 StringBuilder
        answer = new StringBuilder();
        // 재귀 시작
        dfs(0);

        System.out.println(answer);
    }
    // 몇번째 숫자를 고르고 있느냐
    // 0 ~ Level ~ m - 1
    private void dfs(int level){
        // 모두 다 골랐다.
        if (level == m){
            // 정답 저장
            for (int i = 0; i < m; i++) {
                answer.append(arr[i]).append(' ');
            }
            answer.append('\n');
        }
        // 아직 남았다.
        // 1 ~ n까지 반복한다.
        else for (int i = 1; i < n + 1; i++) {
            // 이번 숫자로 i를 택한다.
            arr[level] = i;
            dfs(level + 1);
        }{

        }
    }


    public static void main(String[] args) throws IOException {
        new boj15651().solution();
    }
}

출력 결과

입력
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