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

[๋ฐฑ์ค€] 6603๋ฒˆ: ๋กœ๋˜(dfs, ๋ฐฑํŠธ๋ž˜ํ‚น)

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

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

 

6603๋ฒˆ: ๋กœ๋˜

๋ฌธ์ œ ๋…์ผ ๋กœ๋˜๋Š” {1, 2, ..., 49}์—์„œ ์ˆ˜ 6๊ฐœ๋ฅผ ๊ณ ๋ฅธ๋‹ค. ๋กœ๋˜ ๋ฒˆํ˜ธ๋ฅผ ์„ ํƒํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ์ „๋žต์€ 49๊ฐ€์ง€ ์ˆ˜ ์ค‘ k(k>6)๊ฐœ์˜ ์ˆ˜๋ฅผ ๊ณจ๋ผ ์ง‘ํ•ฉ S๋ฅผ ๋งŒ๋“  ๋‹ค์Œ ๊ทธ ์ˆ˜๋งŒ ๊ฐ€์ง€๊ณ  ๋ฒˆํ˜ธ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, k=8, S={1,2,3,5,8,13,21,34}์ธ ๊ฒฝ์šฐ ์ด ์ง‘ํ•ฉ S์—์„œ ์ˆ˜๋ฅผ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ์ด 28๊ฐ€์ง€์ด๋‹ค. ([1,2,3,5,8,13], [1,2,3,5,8,21], [1,2,3,5,8,34], [1,2

www.acmicpc.net

 

์ฝ”๋“œ

import java.util.Scanner;

public class Main {

	static int[] arr;
	static boolean[] visit;
	static int N;

	public static void dfs(int start, int depth) {
		if(depth == 6) {	// ํƒˆ์ถœ ์กฐ๊ฑด(์ถœ๋ ฅ)
			for(int i=0; i<N; i++) {
				if(visit[i] == true) {	// ํƒ์ƒ‰๋œ๊ณณ => ์ถœ๋ ฅ
					System.out.print(arr[i] + " ");
				}
			}
			System.out.println();
                        return;	// ์žฌ๊ท€ ํ•จ์ˆ˜ ์ข…๋ฃŒ

		}
		
		for(int i=start; i<N; i++) {
			visit[i] = true;	// ๋ฐฉ๋ฌธํ•œ ๊ณณ ์ฒดํฌ
			dfs(i+1, depth+1);	// ์žฌ๊ท€ํ˜ธ์ถœ, ํ•˜๋‚˜์˜ ๊นŠ์ด๋ฅผ ํƒ์ƒ‰ ํ›„ => ๋‹ค์Œ ํ˜ธ์ถœ์‹œ ๊นŠ์ด+1
			visit[i] = false;	// ์ดˆ๊ธฐํ™”
		}
	}

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		while(true) {
			N = scan.nextInt();
			arr = new int[N];
			visit = new boolean[N];
			
			if(N == 0)
				break;
			
			for(int i=0; i<N; i++) {
				arr[i] = scan.nextInt();
			}
			
			dfs(0, 0);
			System.out.println();
		}
		
		scan.close();
	}

}

ํ’€์ด

์ฃผ์–ด์ง„ ์ˆซ์ž์ค‘(6๊ฐœ ~ 13๊ฐœ) ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

์ง‘ํ•ฉ S๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ฃผ์–ด์ง€๊ณ , S์— ํฌํ•จ๋˜๋Š” ์ˆ˜๋ฅผ 6๊ฐœ์”ฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๊นŠ์ด๊ฐ€ 6(6๊ฐœ ์„ ํƒ)์ด ๋  ๋•Œ ๊นŒ์ง€ dfs๋ฅผ ๊ณ„์† ๋Œ๋ฆฐ๋‹ค. 

๊นŠ์ด๊ฐ€ 6์ผ๋•Œ 

dfs๋ฅผ ํ†ตํ•ด ๊นŠ์ด๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ , ๊นŠ์ด๊ฐ€ 6์ด ๋์„๋•Œ(6๊ฐœ ์„ ํƒ) ๋ฐฑํŠธ๋ž˜ํ‚น์„ ํ†ตํ•ด ๊ณ ๋ฅด์ง€ ์•Š์€ ๋‹ค์Œ ๋ฒˆํ˜ธ๋ฅผ ๊ณ ๋ฅธ๋‹ค.

์•„๋ž˜์˜ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

input - [1, 2, 3, 4, 5, 6, 7]

 

์ฒ˜์Œ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ - {1, 2, 3, 4, 5, 6}

๋‹ค์Œ์€ 6์—์„œ ๋ฐฑํŠธ๋ž˜ํ‚น์„ ํ›„ 7์„ ๋ฐฉ๋ฌธํ•˜๋ฉด - {1, 2, 3, 4, 5, 7}

๊ทธ ๋‹ค์Œ์€ 5์—์„œ ๋ฐฑํŠธ๋ž˜ํ‚น ํ›„ 6์„ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋‹ค. - {1, 2, 3, 4, 6, 7}

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€