백준 15654번: N과 M (5) :: 매운코딩
728x90
300x250

임의로 지정해준 숫자들의 순열구하는 문제

import java.util.*;

public class Main {

	public static int N,M;
	public static int[] arr;
	public static int[] ans;
	public static boolean[] visit;
	public static StringBuilder sb = new StringBuilder();
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		N = sc.nextInt();
		M = sc.nextInt();
		arr = new int[N];
		ans = new int[M];
		visit = new boolean[N];
		
		for (int i = 0; i < N; i++) {
			arr[i]=sc.nextInt();
		}
		
		Arrays.sort(arr);
		
		dfs(0);
		System.out.println(sb);
		
	}
	
	public static void dfs(int idx) {
		//종료조건
		//뽑을 갯수만큼 뽑았는가?
		if(idx == M) {
			for (int i = 0; i < M; i++) {
				sb.append(ans[i]+" ");
			}
			sb.append("\n");
			return;
		}
		
		//탐색
		for (int i = 0; i < N; i++) {
			int n = arr[i];
			
			//이미 들렸던 곳인가?
			if(visit[i])
				continue;
			
			visit[i] = true;
			ans[idx] = n;
			dfs(idx+1);
			visit[i] = false;
		}
	}

}
728x90

'알고리즘 > 조합 & 순열' 카테고리의 다른 글

백준 14888번: 연산자 끼워넣기  (0) 2020.03.10
백준 15655번: N과 M (6)  (0) 2020.03.04
백준 15652번: N과 M (4)  (0) 2020.03.04
백준 15651번: N과 M (3)  (0) 2020.03.03
백준 15650번: N과 M (2)  (0) 2020.03.03

+ Recent posts