코딩테스트/백준

[Dev-Ping9] 백준 15649번 - N과 M (1) (Java)[DFS]

DevPing9_ 2021. 12. 18. 17:09

 

# 문제설명

 dfs 문제이다. 모든노드를 탐색하면서 조건에 도달할 시 출력해주면 된다.

 

 *StringBuilder 와 Sysout 의 성능차이는 어마어마하다.

 

 

# 코드 구현

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

public class Main{
    static boolean[] picked;
    static int[] space;
    static StringBuilder sb = new StringBuilder();
    static void dfs(int idx, int nodeEnd,int limit){
        if(idx == limit){
            // printArr(space);
            for(int num:space){
                sb.append(num).append(" ");
            }
            sb.append("\n");
            return;
        }
        for(int i=1; i<=nodeEnd;i++){
            if(!picked[i]){
                picked[i]=true;
                space[idx]=i;
                dfs(idx+1,nodeEnd,limit);
                picked[i]=false;
            }
        }

        
    }
    static void printArr(int [] arr){
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }

    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        
        picked = new boolean[n+1];
        space = new int[m];        
        dfs(0,n,m);
        System.out.print(sb);


    }
}
728x90