2023. 2. 1. 22:23ใ๐ Algorithm/๐ C++ ๋ฌธ์ ํ์ด
์์ด(Permutation)์ด๋?
์์๊ฐ ์ ํด์ง ์์์ ์งํฉ์ ๋ค๋ฅธ ์์๋ก ์๋ ์ฐ์ฐ
ex) n๊ฐ์ ์งํฉ ์ค n ๊ฐ๋ฅผ ๊ณจ๋ผ๋ผ
์ํ ๊ณต์ ) nPr = n! / (n-r)!
์์ด ๊ตฌํํ๊ธฐ
1. next_permutation / prev_permutation
next_permutation : ์ค๋ฆ์ฐจ์ ๋ฐฐ์ด ๊ธฐ๋ฐ
prev_permutation : ๋ด๋ฆผ์ฐจ์ ๋ฐฐ์ด ๊ธฐ๋ฐ
next_permutation([first, last))
- first : ์์ด์ ์์ํ ๋ฒ์์ ์ฒซ๋ฒ์งธ ์ฃผ์
- last : ํฌํจ๋์ง ์์ ๋ง์ง๋ง ์ฃผ์
#include <vector>
#include <algorithm>
#include <iostream>
void printV(vector<int> &v) {
for(int i = 0; i < v.size(); i++) {
cout << v[i] << ' ';
}
cout << '\n';
}
...
for (int i = 1; i <= 3; i++) {
v.push_back(i);
}
do {
printV(v);
} while(next_permutation(v.begin(), v.end()));
๋ง์ฝ ๋ฐฐ์ด์ ํน์ ๋ถ๋ถ๋ง ์ด์ฉํด์ ์์ด์ ๊ตฌํ๊ณ ์ถ๋ค๋ฉด?
- next_permutation(v.begin(), v.begin() + 3);
์ฃผ์ํ ์ !!)
- prev ๋ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ์ฌ,
- next ๋ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ์ฌ ์ฌ์ฉํด์ผ ํจ!
2. ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ ์์ด
void makePermutation (int n, int r, int depth) {
cout << n << " : " << r << " : " << depth << "\n";
if (r == depth) {
printV(v);
return;
}
for(int i = depth; i <n; i++) {
swap(v[i], v[depth]);
makePermutation(n, r, depth + 1);
swap(v[i], v[depth]);
}
return;
}
์ฃผ์ํ ์ !!) ์ฌ๊ทํจ์๋ ์ข ๋ฃ ์กฐ๊ฑด์ด ํ์ํ๋ค
์กฐํฉ(Permutation)์ด๋?
์์ ์๊ด์์ด ๋ค๋ฅธ ์์๋ก ์๋ ์ฐ์ฐ
์ํ ๊ณต์ ) nCr = n! / [r! * (n-r)!]
์กฐํฉ ๊ตฌํํ๊ธฐ
1. ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ ์กฐํฉ
void print(vector<int> b) {
for(int i : b) cout << i << " ";
cout << "\n";
}
void combi(int start, vector<int> b) {
if (b.size() == k) {
print(b);
return;
}
for (int i = start + 1; i < n; i++) {
b.push_back(i);
combi(i, b);
b.pop_back();
}
return;
}
2. ์ค์ฒฉ for ๋ฌธ์ ์ด์ฉํ ์กฐํฉ
3๊ฐ ์ด์ ๋ฝ๋ ๊ฒฝ์ฐ์๋ ์ค์ฒฉ for ๋ฌธ ๋ณด๋ค ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ์
for (int i = 0; i <n; i++) {
for(int j = i+1; j <n; j++) {
for(int k = j+1; k <n; k++) {
cout << i << j << '\n';
}
}
}
์กฐํฉ ํน์ง!)
nCr = nC(n-r) ์ ๋์ผํ๋ค
ex) 9๊ฐ ์ค 2๊ฐ ๋ฝ๋ ๋ฐฉ๋ฒ๊ณผ 9๊ฐ ์ค 7๊ฐ ๋ฝ๋ ๋ฐฉ๋ฒ์ด ๋์ผ
์ฆ, 9๊ฐ ์ค 7๊ฐ ๋ฝ๋ ๋ฌธ์ ๋์ค๋ฉด -> 9๊ฐ ์ค 2๊ฐ ๋ฝ์์ ์ ๊ฑฐํ๋ฉด ๋๋ค
'๐ Algorithm > ๐ C++ ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
C++ ๋์ ํฉ (0) | 2023.02.10 |
---|---|
C++ String ์๊ณ ๋ฆฌ์ฆ์์ ์์ฃผ ์ฐ์ด๋ ๋ฉ์๋ (0) | 2023.02.06 |
0. C++ ์ ์ถ๋ ฅ (0) | 2023.01.27 |