728x90
DFS: Depth - First Search (๊น์ด์ฐ์ ํ์)
- ํ์ฌ ์ง์ ์์ ์ ํด๋์ ์ง์ ๊น์ง ๋ ธ๋๋ฅผ ๊น๊ฒ ํ์ํ๋ ๋ฐฉ์
- ์คํ ๋๋ ์ฌ๊ทํจ์๋ก ๊ตฌํํ๋ค.
์ฌ๊ทํจ์
- ์๊ธฐ ์์ ์ ๊ณ์ํด์ ํธ์ถํ๋ค.
- ์ด๊ธฐํ
- ๋๋๋ ์กฐ๊ฑด (if๋ฌธ)
- ๊ฐ์ง(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
ํน์
์ฒ์ ์ถ๋ ฅํ ๋์์ ๋ฃ์. -> a
*๋ ๋ค ๋ฃ๋ ๊ฒฝ์ฐ๋ ์๋ค.
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
'๐ป > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] vector push_back๊ณผ emplace_back (0) | 2024.06.27 |
---|---|
[c++] ๋ฐ์ฌ๋ฆผ / ์ฌ๋ฆผ / ๋ด๋ฆผ ํจ์ (0) | 2024.04.11 |
[c++] DAT (0) | 2024.03.21 |
[c++] insertํจ์/ eraseํจ์/ sortํจ์/ swapํจ์ (0) | 2024.03.21 |
[c++] vector ์ ๋ฆฌ (0) | 2024.02.18 |