본문 바로가기

코딩테스트/JAVA

[백준 JAVA] 15649번: N과 M (1) - 중복 없는 순열

https://www.acmicpc.net/problem/15649

 

Java의 기본적인 입출력

import java.util.Scanner;

Scanner sc = new Scanner(System.in);

int n = sc.nextInt();

System.out.println();

오늘은 여기까지만 외우자.

 

코드는 백트래킹을 기초로 dfs를 사용해서 구현하였다.

import java.util.Scanner;

public class Main {
	
	public static int[] arr;
	public static boolean[] visit;
	
    public static void main(String[] args) {
        
    	Scanner sc = new Scanner(System.in);
        
        int n = sc.nextInt();
        int m = sc.nextInt();
        
        arr = new int[m];
        visit = new boolean[n];
        dfs(n, m, 0);
        
    }
    
    public static void dfs(int n, int m, int depth) {
    	if(depth == m) {
    		for (int val : arr) {
    			System.out.print(val + " ");
    		}
    		System.out.println();
    		return;
    	}
    	
    	for(int i=0;i<n;i++) {
    		if(!visit[i]) {
    			visit[i] = true;
    			arr[depth] = i+1;
    			dfs(n,m,depth+1);
    			visit[i] = false;
    		}
    	}
    }
}

 

 

이렇게 설명해야하는 내 자신이 너무 한심하다. n, m 에 4, 2를 넣었을때 동작하는 방식이다.

 

다음 문제를 풀며 좀더 감을 잡도록 하자.