๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

[๋ฐฑ์ค€] 15650๋ฒˆ: N๊ณผ M (2) (dfs, ๋ฐฑํŠธ๋ž˜ํ‚น)

by ์ฃผ๋ฐœ2 2020. 2. 18.
๋ฐ˜์‘ํ˜•

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

 

15650๋ฒˆ: N๊ณผ M (2)

ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ˆ˜์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ค‘๋ณต๋˜๋Š” ์ˆ˜์—ด์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ถœ๋ ฅํ•˜๋ฉด ์•ˆ๋˜๋ฉฐ, ๊ฐ ์ˆ˜์—ด์€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ์ˆ˜์—ด์€ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

www.acmicpc.net

 

์ฝ”๋“œ

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 StringBuilder sb = new StringBuilder();
	
	public static void dfs(int count) {
		if(count == M) {
			for(int i=0; i<M-1; i++) {
				if(arr[i] > arr[i+1])
					return;
			}
			
			for(int i : arr)
				sb.append(i + " ");
			sb.append("\n");
			return;
		}
		
		for(int i=1; i<=N; i++) {
			if(!visit[i]) {
				visit[i] = true;
				arr[count] = i;
				dfs(count+1);
				visit[i] = false;
			}
		}
	}

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		N = scan.nextInt();
		M = scan.nextInt();
		arr = new int[M];
		visit = new boolean[N+1];
		dfs(0);
		
		System.out.println(sb);
		scan.close();
	}

}

 

ํ’€์ด

N๊ณผ M (1) ์ฐธ๊ณ 

N๊ณผ M (1)๋ฒˆ ๋ฌธ์ œ์™€ ๋™์ผํ•˜์ง€๋งŒ ์ฐจ์ด์ ์€,

 โ— ๊ณ ๋ฅธ ์ˆ˜์—ด์ด ์˜ค๋ฆ„์ฐจ์ˆœ์ด์–ด์•ผ ํ•œ๋‹ค.

์œ„ ํ•˜๋‚˜๋ฐ–์— ์—†๋‹ค. 

๋”ฐ๋ผ์„œ M๊ฐœ๋งŒํผ ์ˆœ์—ด์„ ๊ณจ๋ž์„ ๋•Œ, ๊ณ ๋ฅธ ์ˆœ์—ด์ด ์˜ค๋ฆ„์ฐจ์ˆœ์ด ์•„๋‹๊ฒฝ์šฐ ์•„๋ฌด๋Ÿฐ ์ˆ˜ํ–‰ ์—†์ด ์ข…๋ฃŒํ•ด์ฃผ๊ณ ,

์˜ค๋ฆ„์ฐจ์ˆœ์ผ ๊ฒฝ์šฐ StringBuilder ์— ์ €์žฅํ•œ๋‹ค.

if(count == M) {
	for(int i=0; i<M-1; i++) {
		if(arr[i] > arr[i+1])
			return;
	}
					
	for(int i : arr)
		sb.append(i + " ");
	sb.append("\n");
	return;
}

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€