끄적끄적 코딩
article thumbnail
Published 2023. 1. 23. 23:53
[Java] 백준 15649번 N과 M (1) 알고리즘

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

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;
  }
}

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

[Java] 백준 6603번 로또  (0) 2023.01.24
[Java] 백준 15650번 N과 M (2)  (0) 2023.01.23
[Java] 백준 1260번 DFS와 BFS  (0) 2023.01.23
[Java] 백준 10845번 큐  (0) 2023.01.23
[Java] 백준 14891번 톱니바퀴  (1) 2023.01.20

검색 태그