Programming

[2์ฃผ์ฐจ] ๋ฐฑ์ค€ 15649๋ฒˆ: N๊ณผ M (1)_C++

mnzy๐ŸŒฑ 2022. 4. 4. 01:02

๋ฐฑ์ค€ 15649: N๊ณผ M (1)

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

 

15649๋ฒˆ: N๊ณผ M (1)

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

www.acmicpc.net


-> N๊ณผ M์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค

-> N๊ฐœ์˜ ์ˆซ์ž ์ค‘์— M๊ฐœ๋ฅผ ๋ฝ‘์•„ ๋ฐฐ์—ดํ•œ๋‹ค.  


๋ฌธ์ œ์— ์ ‘๊ทผ์กฐ์ฐจ ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์› ๋‹ค.

์ฒ˜์Œ์—๋Š” while๋ฌธ์„ ์“ฐ๋Š” ๊ฑด๊ฐ€ ํ–ˆ๋Š”๋ฐ ๊ทธ๊ฒƒ๋„ ์•ˆ๋˜๊ณ , ์—„์ฒญ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ๊ตฌ๊ธ€๋งํ–ˆ๋‹ค.

๊ฒฐ๋ก ์€ ๋ฐฑํŠธ๋ž˜ํ‚น!

์ด ๋ฌธ์ œ๋Š” DFS๋ฅผ ํ†ตํ•ด ๋ฐฑํŠธ๋ž˜ํ‚น์„ ํ•ด์ฃผ๋ฉด ํ•ด๊ฒฐ๋˜๋Š” ๋ฌธ์ œ๋ผ๊ณ  ํ•˜๋Š”๋ฐ,

๋ฌธ์ œ๋Š” ๋ฐฑํŠธ๋ž˜ํ‚น๋„, DFS๋„ ์ฒ˜์Œ ๋“ค์–ด๋ดค๋‹ค


- DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)

: ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ๋กœ(ํ›„๋ณด)๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค. 

-> ์žฌ๊ท€ํ•จ์ˆ˜๋‚˜ ์Šคํƒ์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค

-> ๋…ธ๋“œ ๋ฐฉ๋ฌธ ์‹œ ๋ฐฉ๋ฌธ์—ฌ๋ถ€๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ฒ€์‚ฌํ•ด์•ผํ•จ   // ์•„๋‹ˆ๋ฉด ๋ฌดํ•œ๋ฃจํ”„์— ๋น ์งˆ ์ˆ˜ ์žˆ์Œ

 

[์ฐธ๊ณ ] https://better-tomorrow.tistory.com/entry/DFS-BFS-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

 

- ๋ฐฑํŠธ๋ž˜ํ‚น 

: DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, DFS์˜ ๊ตฌ์กฐ๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์— ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

-> ํ›„๋ณดํ•ด์˜ ์ง‘ํ•ฉ์—์„œ ์ตœ์ ํ•ด ์ง‘ํ•ฉ์„ ์ฐพ์•„๋‚ด๋Š” ๋ฌธ์ œ์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค

*ํ›„๋ณดํ•ด : ํ•ด๊ฐ€ ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๋ชจ๋“  ์กฐํ•ฉ

*์ตœ์ ํ•ด : ๋ฌธ์ œ์—์„œ ์ •ํ•˜๋Š” ๋‹ต์œผ๋กœ์„œ์˜ ๊ธฐ์ค€์„ ๋งŒ์กฑํ•˜๋Š” ํ•ด

 

-> ๋ฐฑํŠธ๋ž˜ํ‚น ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•ต์‹ฌ์€ ํ”ํžˆ๋“ค '๊ฐ€์ง€์น˜๊ธฐ'๋ผ๊ณ ๋“ค ํ•œ๋‹ค. 

๊ฐ€์ง€์น˜๊ธฐ๋ž€ ๋ง์€ ๋ฐฑํŠธ๋ž˜ํ‚น์ด ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋ฆฌ(๋‚˜๋ฌด)์—์„œ ์• ์ดˆ์— ์กฐ๊ฑด์— ๋งž์ง€์•Š๋Š” ๋…ธ๋“œ๋Š” ๊ฐ€์ง€๋ฅผ ์ณ๋ฒ„๋ฆฌ์ž(๋” ์ด์ƒ DFS๋กœ ๊นŠ์ด ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜์ง€ ๋ง์ž)๋Š” ๋œป์ด๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด DFS + ์กฐ๊ฑด๋ฌธ์ธ ์…ˆ์ด๋‹ค.

 

[์ฐธ๊ณ ] https://pangtrue.tistory.com/71

https://devyoseph.tistory.com/161?category=972355

 

+) ๋ฐฑํŠธ๋ž˜ํ‚น ๋ฌธ์ œ: https://www.acmicpc.net/problem/9663

 


๊ฐœ๋…์„ ์•Œ์•„๋„ ๋ฐ”๋กœ ํ’€๋ฆฌ์ง€๋Š” ์•Š์•˜๋‹ค..

์Šค์Šค๋กœ ์‘์šฉํ•ด๋ณด๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๋‹ค๊ฐ€ ์•ˆ๋˜๊ธธ๋ž˜ ์ผ๋‹จ์€ ๊ตฌ๊ธ€๋งํ•ด์„œ ์ฝ”๋“œ ๋ถ„์„ํ•ด๋ดค๋‹ค! 

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ํŠนํžˆ๋‚˜ ๊ทธ๋ƒฅ ๋„˜์–ด๊ฐ€์ง€ ๋ง๊ณ  ๋ฐฑํŠธ๋ž˜ํ‚น,DFS ๋ฌธ์ œ๋“ค์„ ๋” ํ’€์–ด๋ด์•ผ ๋  ๊ฒƒ ๊ฐ™๋‹ค.

์•ฝ๊ฐ„ ๋ง‰๋ง‰ํ•˜์ง€๋งŒ ๊ทธ๋ž˜๋„ ๊ณ„์† ๋ณด๋‹ค๋ณด๋ฉด ์–ธ์  ๊ฐ€๋Š” ์ต์ˆ™ํ•ด์ง€๊ฒ ์ง€~~


// [์ฐธ๊ณ ] https://tooo1.tistory.com/191

#include <iostream>
using namespace std;
#define MAX 9

int N, M;
int arr[MAX];
bool visited[MAX];

void dfs(int k) {	
	if (k == M) {
		for (auto i = 0; i < M; i++) {
			cout << arr[i] << " ";
		}
		cout << "\n";
	}
	else {
		for (auto i = 1; i <= N; i++) {
			if (!visited[i]) {
				visited[i] = true;
				arr[k] = i;
				dfs(k + 1);
				visited[i] = false;
			}
		}
	}
}

int main() {
	cin >> N >> M;
	dfs(0);
}

 

- k๋Š” ํ˜„์žฌ ์œ„์น˜ , M์€ ๋ชฉํ‘œ ์œ„์น˜

- ๋ชฉํ‘œ์— ๋„๋‹ฌํ–ˆ๋‹ค๋ฉด -> arr์— ์ €์žฅํ•œ ๊ฐ’ M๊ฐœ ๋งŒํผ ์ถœ๋ ฅ

- ๋ชฉํ‘œ์— ๋„๋‹ฌํ•˜์ง€ ์•Š์•˜์„ ๋•Œ

-> ๋ฐฉ๋ฌธ ์•ˆํ–ˆ์„ ๊ฒฝ์šฐ (!visited[i]) : ๋ฐฉ๋ฌธ ํ‘œ์‹œ ํ›„ i๊ฐ’์„ arr์— ์ €์žฅ / k+1๋กœ ๋“ค์–ด๊ฐ€์„œ ๋ฐฑํŠธ๋ž˜ํ‚น ์„ค์ •!


๊ตฌ๊ธ€๋งํ•œ ์ฝ”๋“œ๋ผ์„œ ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ด๋ฅผ ํ•˜์ง€๋Š” ๋ชปํ–ˆ์ง€๋งŒ, ๊ฐœ๋…์„ ๋‹ค์‹œ ์ดํ•ดํ•˜๊ณ  ์Šค์Šค๋กœ ์‘์šฉํ•ด์„œ

๋‹ค์Œ์— ๋ณต์Šตํ•  ๋•Œ์—๋Š” ๋‚ด๊ฐ€ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ฝ”๋“œ ์ž‘์„ฑํ•ด์„œ ๋‹ค์‹œ ํ’€ ๊ฒƒ์ด๋‹ค!