Tiny Bunny
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป/C++

[c++] DFS ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ , ์žฌ๊ท€ํ•จ์ˆ˜

by soonybutter 2024. 4. 2.
728x90

 

 

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

  • ํ˜„์žฌ ์ง€์ ์—์„œ ์ •ํ•ด๋†“์€ ์ง€์ ๊นŒ์ง€ ๋…ธ๋“œ๋ฅผ ๊นŠ๊ฒŒ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹
  • ์Šคํƒ ๋˜๋Š” ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.

 

 

 

 

์žฌ๊ท€ํ•จ์ˆ˜

  • ์ž๊ธฐ ์ž์‹ ์„ ๊ณ„์†ํ•ด์„œ ํ˜ธ์ถœํ•œ๋‹ค.
  1. ์ดˆ๊ธฐํ™”
  2. ๋๋‚˜๋Š” ์กฐ๊ฑด (if๋ฌธ)
  3. ๊ฐ€์ง€(branch) / ์žฌ๊ท€์กฐ๊ฑด

 

 

 

 

Q. ์žฌ๊ท€ํ•จ์ˆ˜ ์˜ˆ์‹œ๋ฌธ์ œ

์ˆซ์ž n์„ ์ž…๋ ฅ ๋ฐ›์œผ์„ธ์š”.

์ˆซ์ž n๋ถ€ํ„ฐ 0๊นŒ์ง€ Count down ํ–ˆ๋‹ค๊ฐ€

๋‹ค์‹œ ๋Œ์•„์˜ค๋Š” ์ˆ˜๋ฅผ ์ถœ๋ ฅ ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

ex) 4

4 3 2 1 0 1 2 3 4

ex ) 6

6 5 4 3 2 1 0 1 2 3 4 5 6

 

#include<iostream>

using namespace std;

void abc(int num)
{
	cout << num << " ";

	//์ข…๋ฃŒ์กฐ๊ฑด
	if (num == 0)
	{
		return;
	}
	//์žฌ๊ท€์กฐ๊ฑด
	abc(num - 1);

	cout << num<< " ";
}

int main()
{
	//์ดˆ๊ธฐํ™”
	int n;
	cin >> n;

	abc(n);

	return 0;
}

 

์œ„์˜ ์žฌ๊ท€ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋œ ์ฝ”๋“œ๋ฅผ ์˜ˆ์‹œ๋กœ ์‚ดํŽด๋ณด๋ฉด,

 

1. main ํ•จ์ˆ˜์—์„œ ์žฌ๊ท€ํ•จ์ˆ˜์— ์ดˆ๊ธฐ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.

๋ณดํ†ต ์–ด๋Š๊นŠ์ด๊นŒ์ง€ ๊ฐˆ ๊ฒƒ์ธ์ง€ ๋‚˜ํƒ€๋‚ด๋Š” lev์ด ๋  ์ˆ˜  -> lev 

ํ˜น์€

์ฒ˜์Œ ์ถœ๋ ฅํ•  ๋Œ€์ƒ์„ ๋„ฃ์Œ.   -> 

 

*๋‘˜ ๋‹ค ๋„ฃ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

 

 

2. ์žฌ๊ท€ํ•จ์ˆ˜ ์•ˆ์œผ๋กœ ๋“ค์–ด๊ฐ€์ž.

  • ์ฒ˜์Œ์— num์ด ๋“ค์–ด์˜จ๋‹ค.
  • ์ƒ๋‹จ์— ์žˆ๋Š” cout ์‹คํ–‰ํ•œ๋‹ค.
  • '์žฌ๊ท€์กฐ๊ฑด'์— ํ•ด๋‹น๋˜๋Š” abc(num-1)์œผ๋กœ ๊ฐ€์„œ num์ด 0์ด ๋  ๋•Œ๊นŒ์ง€ ๊ณ„์†ํ•ด์„œ abc()ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋œ๋‹ค.
  • num==0์ด๋ฉด return์ฆ‰ '๋Œ๋ ค์ค€๋‹ค'.  
  • abc(num=0)์ด๋ ค๋ฉด ํ•˜๋‹จ์˜ num-1์˜ num์€ 1์ด์˜€์–ด์•ผํ•จ. ์ด๋ฐฉ์‹์œผ๋กœ ๊ณ„์†ํ•ด์„œ ๋˜๋Œ์•„๊ฐ„๋‹ค.
  • ๋˜๋Œ์•„๊ฐ€๋ฉด์„œ ํ•˜๋‹จ์˜ cout์„ ์‹คํ–‰ํ•œ๋‹ค.

 

์žฌ๊ท€ํ˜ธ์ถœ ์œ„ ๊ตฌ๋ฌธ: ํ˜ธ์ถœ ์ „ ์ˆ˜ํ–‰๋จ.
์žฌ๊ท€ํ˜ธ์ถœ ์•„๋ž˜ ๊ตฌ๋ฌธ: ๋ฆฌํ„ดํ•ด์„œ ๋Œ์•„์™”์„ ๋•Œ ์ˆ˜ํ–‰๋จ.

 

 

 

 

์žฌ๊ท€ํ•จ์ˆ˜์™€ ์ฃผ์‚ฌ์œ„๋ฌธ์ œ

Q.์˜ˆ์‹œ๋ฌธ์ œ

์ฃผ์‚ฌ์œ„ 3๊ฐœ๋ฅผ ๋Œ๋ ธ์„ ๋•Œ ๋ชจ๋“  ํ•ฉ์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

(์ฃผ์‚ฌ์œ„: 1~6 (111,112,113,114...666)

 

#include<iostream>

using namespace std;

void dice(int lev,int sum)
{
	if (lev == 3)  //์ข…๋ฃŒ์กฐ๊ฑด
	{

		cout << sum;
		return;

	}

	//์žฌ๊ท€์กฐ๊ฑด
	for (int i = 1; i <= 6; i++)
	{
		//ํ˜„์žฌ ๋ ˆ๋ฒจ์—์„œ์˜ sum์€ ๊ฐ์ž ๋‹ค ๋‹ค๋ฅด๋‹ค.
        //๊ฐ€์ง€์˜ ๊ฐฏ์ˆ˜๋ฅผ for๋ฌธ์œผ๋กœ ํ‘œํ˜„ํ•จ.
		dice(lev + 1, sum + i);
	}
	
}

int main()
{
	dice(0, 0); 
	
	return 0;
}
  • ๊ฐ€์ง€์˜ ๊ฐฏ์ˆ˜๋ฅผ for ๋ฌธ์œผ๋กœ ํ‘œํ˜„ํ•จ.
    ex) ์ฃผ์‚ฌ์œ„ ๋ˆˆ๊ธˆ์ด 6๊ฐœ์—ฌ์„œ for๋ฌธ์„ 6๋ฒˆ ๋Œ๋ฆผ.
  • i : ๊ฐ€์ง€, ๋ˆˆ๊ธˆ
728x90

TOP

Designed by ํ‹ฐ์Šคํ† ๋ฆฌ