알고리즘/JAVA

Recursion: 백준 N과 M(6)-15655

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

문제 유형

Recursion

작성 코드

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

public class Main {
    public static int N;
    public static int M;

    public static int[] givenNums;
    public static int[] row;
    public static boolean[] checks;

    public static StringBuilder answer;
    public static void recursive(int depth, int index) {
        if (depth == M) {
            for (int i = 0; i < M; i++) {
                answer.append(row[i]).append(" ");
            }
            answer.append("\n");
            return;
        }

        for (int i = index; i < N; i++) {
            if (!checks[i]) {
                checks[i] = true;
                row[depth] = givenNums[i];
                recursive(depth+1, i);
                checks[i] = false;
            }
        }
    }
    public static void input() {
        Scanner sc = new Scanner(System.in);
        N = sc.nextInt();
        M = sc.nextInt();
        answer = new StringBuilder();

        givenNums = new int[N];
        checks = new boolean[N];
        row = new int[M];

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

접근 방식

  1. 이전의 수열 문제와 유사한 구조이지만 동시에 중복을 방지해야한다는 점을 참고하여 구현했다.
  2. 중복을 방지하기위해 Recursion에 index를 지정하여 시작점을 다르게 하였다. 

개선 사항

완벽하다고 생각한다.

반응형

'알고리즘 > JAVA' 카테고리의 다른 글

Recursion: 백준 N과 M(7)-15656  (0) 2024.08.26
Recursion: 백준 N과 M(8)-15657  (0) 2024.08.23
Recursion: 백준 N과 M(5) - 15654  (0) 2024.08.21
Two Pointers: 백준 배열 합치기-11728  (0) 2024.08.09
Two Pointers: 백준 회문-17609  (1) 2024.08.09