알고리즘/JAVA

Recursion: 백준 N과 M(7)-15656

문괜 2024. 8. 26. 12:00
반응형

문제 유형

Recursion

작성 코드

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static StringBuilder answer;
    public static int[] givenNums;
    public static int[] row;
    public static boolean[] checks;
    public static int N;
    public static int M;
    public static void recursive(int depth){
        if (depth == M) {
            for (int element :  row) {
                answer.append(element).append(" ");
            }
            answer.append("\n");
            return;
        }
        for (int i = 0; i < givenNums.length; i++) {
            if (!checks[i]) {
                row[depth] = givenNums[i];
                recursive(depth+1);
            }
        }
    }
    public static void input(){
        Scanner scanner = new Scanner(System.in);
        answer = new StringBuilder();
        N = scanner.nextInt();
        M = scanner.nextInt();

        checks = new boolean[N];
        row = new int[M];
        givenNums = new int[N];
        for (int i = 0; i < N; i++) {
            givenNums[i] = scanner.nextInt();
        }
        Arrays.sort(givenNums);
    }
    public static void main(String[] args) {
        input();
        recursive(0);
        System.out.println(answer);
    }
}

접근 방식

1. 주어진 배열의 모든 조합이 필요하다. 

2. 그래서 checks를 지웠다.

개선 사항

솔직히 완벽

반응형