알고리즘

[Java] 백준 15649번 N과 M (1)

J3SUNG 2023. 1. 23. 23:53
728x90

수열이 주어지고 크기가 주어질때 가능한 조합의 수를 전부 출력하는 문제입니다.

DFS를 사용해서 모든 경우의 수를 확인해주었습니다.
출력이 많아서 Java에서 시간초과가 발생하여 BufferedWriter를 사용해주었습니다.

import java.io.*;
import java.util.Scanner;

public class Main {
  public static int[] arr;
  public static boolean[] visit;
  public static int n;
  public static int m;
  public static BufferedWriter bf;
  public static void main(String argc[]) throws IOException{
	bf = new BufferedWriter(new OutputStreamWriter(System.out));
    Scanner sc = new Scanner(System.in);
    n = sc.nextInt();
    m = sc.nextInt();
    arr = new int[m];
    visit = new boolean[n];
    for(int i=0; i<n; ++i){
      DFS(i, 0);
    }
    bf.close();
  }

  public static void DFS(int num, int cnt) throws IOException{
    visit[num] = true;
    
    arr[cnt] = num + 1;
    if(m == cnt+1){
      for(int i=0; i<m; ++i) {
    	  bf.write(arr[i] + " ");
      }
      bf.write("\n");
      visit[num] = false;
      return;
    }

    for(int i=0; i<n; ++i){
      if(!visit[i]){
        DFS(i, cnt+1);
      }
    }
    
    visit[num] = false;
  }
}