N M1

๋ฌธ์ œ ์„ค๋ช… : 1๋ถ€ํ„ฐ N๊นŒ์ง€ ์ž์—ฐ์ˆ˜ ์ค‘ ์ค‘๋ณต์—†์ด M๊ฐœ๋ฅผ ๊ณจ๋ผ ์ˆ˜์—ด์„ ๋งŒ๋“ ๋‹ค. ์‚ฌ์ „ ์ฆ๊ฐ€์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•ด๋ผ.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ƒ๊ฐ

  1. ํ•„์š”ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ : ์ค‘๋ณต ์ฒดํฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด boolean ๋ฐฐ์—ด, ์ˆ˜์—ด์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ int ๋ฐฐ์—ด

  2. ์ˆ˜์—ด ๋ฐฐ์—ด์„ 0๋ถ€ํ„ฐ m-1๊นŒ์ง€ index๋ฒˆ์งธ ์ˆ˜๋ฅผ ์ฑ„์šด๋‹ค. a[index] = x, index = index+1, x๋Š” ์‚ฌ์ „ ์ฆ๊ฐ€์ˆœ ์ถœ๋ ฅ์ด๊ธฐ ๋•Œ๋ฌธ์— 1๋ถ€ํ„ฐ ์‹œ์ž‘, n๊นŒ์ง€ ๊ฐ€๋Šฅ ๋„ฃ์€ x๋ฅผ ๋‹ค์Œ์— ์„ ํƒํ•  ๋• ๋นผ๊ธฐ ์œ„ํ•ด c[x] = true๋กœ ๊ธฐ๋กํ•ด์ค€๋‹ค.

  3. index+1๋ฒˆ์งธ ์ˆ˜๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœํ•˜๋ฉด ์ค‘๋ณต์ฒดํฌ c๋ฐฐ์—ด์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ •์ˆ˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , 1๋ถ€ํ„ฐ ์ฒดํฌํ•˜์—ฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ์ˆ˜๊ฐ€ ๋‚˜์˜ค๋ฉด ๊ทธ ์ˆ˜๋ฅผ index+1์— ๋„ฃ๋Š”๋‹ค.

  4. for๋ฌธ i=1~n๊นŒ์ง€ ๋‹ค ๋Œ๊ณ ๋‚˜๋ฉด ๋Œ์•„์™€์„œ c[i] = false;์ฒ˜๋ฆฌ๋ฅผ ๊ผญ ํ•ด์ค€๋‹ค! ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์•ž์ž๋ฆฌ ์ˆ˜๋กœ ๋Œ์•„๊ฐ”์„ ๋•Œ ๋ชจ๋“  ์ˆ˜๊ฐ€ true๋กœ ๋˜์–ด ์„ ํƒ ๊ฐ€๋Šฅํ•œ ์ˆ˜๊ฐ€ ์—†๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค! =>์–ด ๊ทธ๋Ÿผ ์ด๋ฏธ ์‚ฌ์šฉํ•œ ์ˆ˜์ธ๋ฐ false ์ฒ˜๋ฆฌํ•˜๋ฉด ๋‹ค์‹œ ์ด ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋˜๋ฉด ์–ด๋–ปํ•˜๋‚˜ ํ•˜๋Š” ์—ผ๋ ค๋Š” ํ•„์š”์—†๋‹ค. ์™œ๋ƒํ•˜๋ฉด index๋ฒˆ์งธ ์ˆ˜๋ฅผ ์ฑ„์šธ ๋•Œ i๋Š” 1๋ถ€ํ„ฐ 1์”ฉ ์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, index๋ฒˆ์งธ์— i=3์„ ์ฑ„์šฐ๊ณ ๋‚˜์„œ c[i=3] = false์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ๋‚˜๋ฉด i=4๊ฐ€ ๋˜๊ณ  ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ ๊ด€๊ณ„๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค!

ํ•ต์‹ฌ์ด ๋˜๋Š” ์žฌ๊ท€ ํ•จ์ˆ˜ ๋ถ€๋ถ„

for(int i=1;i<=n;i++) {
	if(c[i]) continue;
	c[i] = true;a[index] = i;
	go(index+1,n,m);
	c[i] = false;
}

์žฌ๊ท€ํ•จ์ˆ˜ ์‹คํ–‰ ์ˆœ์„œ(ํ๋ฆ„)

Last updated

Was this helpful?