๋ฐฑํธ๋ํน.
๋์ถฉ ์๊ณ ์๋๊ฑด
๋ฐฑํธ๋ํน == ์์ ํ์(๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฌด์ํ๊ฒ ์ฐพ๊ธฐ)์์ ๊ฐ์ง์น๊ธฐ๋ก ํจ์จ ๋์
์ด์ ๋๋ผ์..ใ ใ ์ฐ์ต๋ฌธ์ ๋ ํ์ด๋ด์ผ๊ฒ ๋ค
๋๋ถ๋ถ์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ค์ ์ํ๋ ๋ชจ๋ ์กฐํฉ์ ๋ง๋ค์ด ๊ทธ ์ค ๋ฌธ์ ์์ ์ํ๋ ๋ต์ ๊ณ ๋ฅด๋ ์์ผ๋ก ํด๊ฒฐ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ง์ฝ n ์ ํ์ด ์๊ณ , ๋ชจ๋ ์กฐํฉ์ ๋ง๋๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ๋ฌธ์ ์์ ์ฃผ์ด์ง ์ ํ ์๊ฐ๋ณด๋ค ๋ ์๋ค๋ฉด, ํญ์ ๋ชจ๋ ์กฐํฉ์ ๋ค ๋ง๋ค์ด ๋ณด๋ ๊ฒ์ด ๊ฐ๋ ์ฑ ์ธก๋ฉด์์๋, ์ฝ๋๋ฅผ ์์ฑํ๋ ์ ์ฅ์์ ๊ฐ์ฅ ์ข๋ค๊ณ ํ ์ ์์ ๊ฒ์ ๋๋ค. ๋ค๋ง, (1, 1, 1, 1, 1), (1, 1, 1, 1, 2), (1, 1, 1, 1, 3), (1, 1, 1, 2, 1), (1, 1, 1, 2, 2), .. ๋ฑ ์ฌ๋ฌ ๊ฐ๋ฅํ ์์ด๊ณผ ์กฐํฉ์ ๋ง๋๋ ๊ฒ์ for๋ฌธ ๋ง์ ์ด์ฉํ์ฌ ํํํ๊ธฐ์๋ ๋ง์ ์ด๋ ค์์ด ์์ต๋๋ค.
์ด๋ฐ ๊ฒฝ์ฐ์ ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ๋ฉด ์ํ๋ ๋ชจ๋ ์์ด๊ณผ ์กฐํฉ์ ๋ง๋ค์ด ๋ผ ์ ์์ต๋๋ค.
์ฌ๊ทํจ์๋ ํฌ๊ฒ ์ข ๋ฃ ์กฐ๊ฑด๊ณผ ์ฌ๊ท ํธ์ถ ๋ถ๋ถ์ผ๋ก ๋๋ฉ๋๋ค.
nํฌ๊ธฐ์ ๋ฐฐ์ด์ 0๊ณผ 1์ ํ๋์ฉ ๋ฃ์ด๊ฐ๋ ์ฌ๊ทํจ์๊ฐ ์๋ค๊ณ ์นฉ์๋ค.
๋ง์ฝ ์ฌ๊ท์์ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ n์ ์ด๋ฅด๋ฉด, ์ข ๋ฃ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉฐ ์ถ๋ ฅ ํ return๋ฅผ ํตํด ํด๊ฐํ๋ฉด ๋ฉ๋๋ค.
์ฌ๊ทํจ์์์๋ ํด๊ฐ์ ์งํํ ๋, ์ง์ ์ง์ ์ arr์ ์ ์๋ ์ซ์๋ฅผ ํ๋ ๋นผ์ค์ผ ํฉ๋๋ค. ๊ทธ๋์ผ ๊ทธ ๋ค์ ์ซ์์ ๋ํด ๊ณต์ ํ๊ฒ ๊ธฐํ๋ฅผ ์ค ์ ์๊ฒ ๋ฉ๋๋ค.
์ด๋ฌํ ๊ณผ์ ์ ๊ฑฐ์ณ ์ฌ๊ท์ ์ผ๋ก ํ์์ ์งํํ๋ฉด ์ํ๋ ์ซ์๋ค์ ์ ๋ถ ๋ง๋ค์ด๋ผ ์ ์๊ฒ ๋ฉ๋๋ค.
์ฐ์ต๋ฌธ์ : k๊ฐ ์ค์ 1๊ฐ๋ฅผ n๋ฒ ๋ฝ๊ธฐ
์ด์ ์ดํ์ ์ซ์๋ฅผ ํ๋ ๊ณ ๋ฅด๋ ํ์๋ฅผ ๋ฒ ๋ฐ๋ณตํ์ฌ ๋์ฌ ์ ์๋ ๋ชจ๋ ์๋ก ๋ค๋ฅธ ์์์์ ๊ตฌํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด๋ณด์ธ์.
์๋ฅผ ๋ค์ด ์ด ์ด ์ธ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ ์กฐํฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ ๋ ฅ ํ์
์ฒซ์งธ ์ค์ ์ ์ด ๊ณต๋ฐฑ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋๋ค.
์ถ๋ ฅ ํ์
์๋ก ๋ค๋ฅธ ์์์์ ๊ฐ์ ๋งํผ์ ์ค์ ๊ฑธ์ณ ํ ์ค์ ํ๋์ฉ ์์์์ ์ํ๋ฅผ ๊ณต๋ฐฑ์ ์ฌ์ด์ ๋๊ณ ์ถ๋ ฅํฉ๋๋ค. ์ด๋ ์์์ ๋ถํฐ ๋ดค์ ๋ ์ฌ์ ์์ผ๋ก ์์ ์์์๋ถํฐ ์ถ๋ ฅํฉ๋๋ค.
๋์ ํ์ด
// ํ๋ฆฐ ์ฝ๋
int k; int n;
vector<int> nums;
void printNums(){
for(int i=0; i<nums.size(); ++i){
cout << nums[i] << " ";
}
cout << "\n";
}
int getNums(int cnt){
if(cnt==n){
printNums();
return 0;
}
for(int i=1; i<=k; ++i){
nums.push_back(i); // ์ฒซ ๊ฐ์ ๋ฃ๊ณ
getNums(cnt+1); // ๋ค์ ๊ฐ์ ๋ฐ๋ณต
}
}
int main() {
cin >> k >> n;
getNums(0);
return 0;
}
์๊ณ ๋ณด๋
getNums๋ก ์ซ์๋ฅผ ๋ฐ์์จ ๋ค์ ๋ค์ ํด์ ์ํด์ ๋ค์ popํด์ค์ผํ๋๋ฐ ๊ทธ๊ฑธ ๋นผ๋จน์๋ค.
int getNums(int cnt){
if(cnt==n){
printNums();
return 0;
}
for(int i=1; i<=k; ++i){
nums.push_back(i); // ์ฒซ ๊ฐ์ ๋ฃ๊ณ
getNums(cnt+1); // ๋ค์ ๊ฐ์ ๋ฐ๋ณต
nums.pop_back(); // ๋ชจ๋ ๋ฐ์์จ ํ์ popํด์ฃผ๊ธฐ
}
}
์ด๋ ๊ฒ ๊ณ ์ณ์ฃผ๋ ์ฑ๊ณต! ํจ์๋ ํ ๊ธฐ๋ฅ๋ง ํ๋๊ฒ best๋ผ์, ์ถ๋ ฅ ํจ์๋ ๋ฐ๋ก ๋นผ๋๋๊ฒ ์ข๋ค๊ณ ํจ
์ฌ๊ท ์๊ทผ ์ด๋ ต๋ค.
์ฐ์ต ๋ง์ด ํด์ผ๊ฒ ์ ๐ข
'๐ ์๊ณ ๋ฆฌ์ฆ > Code Tree' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฝ๋ํธ๋ฆฌ] ์์ ํ์ / ์๋ฆฌ ์ ๋จ์๋ก ์ํ ์ฐ์ต๋ฌธ์ (0) | 2023.02.22 |
---|---|
[์ฝ๋ํธ๋ฆฌ] Greedy - ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ / ๋์ ์ฐ์ต๋ฌธ์ (0) | 2023.02.22 |
[์ฝ๋ํธ๋ฆฌ] DFS / BFS (0) | 2023.02.21 |
[์ฝ๋ํธ๋ฆฌ] TreeSet ์ฐ์ต๋ฌธ์ (0) | 2023.02.09 |
[์ฝ๋ํธ๋ฆฌ] Tree Set (0) | 2023.02.09 |