문제상황
- 크기가 5인 벡터에서, 3개 조합을 뽑고 싶다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<pair<int, int>> arr = {{0, 1}, {0, 2}, {1, 0}, {1, 2}, {2, 1}};
vector<int> comb(arr.size(), 1);
fill(comb.begin(), comb.begin() + 3, 0);
do {
for (int i : comb) {
cout << i << " ";
}
cout << endl;
} while (next_permutation(comb.begin(), comb.end()));
return 0;
}
0 0 0 1 1
0 0 1 0 1
0 0 1 1 0
0 1 0 0 1
0 1 0 1 0
0 1 1 0 0
1 0 0 0 1
1 0 0 1 0
1 0 1 0 0
1 1 0 0 0
- 먼저 벡터의 크기와 같은 comb 정수형 벡터 선언
- 벡터의 일부 요소를 변경
- 여기서는 3개의 조합을 뽑기 위해 0, 1, 2 인덱스를 0으로 채움
comb = {0, 0, 0, 1, 1}
- 그리고 위에서 comb 벡터에서 3개씩 조합을 뽑은 결과를 볼 수 있다.
arr에서 3개의 요소를 선택하여 모든 가능한 조합을 출력
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<pair<int, int>> arr = {{0, 1}, {0, 2}, {1, 0}, {1, 2}, {2, 1}};
vector<int> comb(arr.size(), 1);
fill(comb.begin(), comb.begin() + 3, 0);
do {
for (int i = 0; i < comb.size(); i++) {\
if (comb[i] == 0){
cout << "(" << arr[i].first << ", " << arr[i].second << ") ";
}
}
cout << endl;
} while (next_permutation(comb.begin(), comb.end()));
return 0;
}
(0, 1) (0, 2) (1, 0)
(0, 1) (0, 2) (1, 2)
(0, 1) (0, 2) (2, 1)
(0, 1) (1, 0) (1, 2)
(0, 1) (1, 0) (2, 1)
(0, 1) (1, 2) (2, 1)
(0, 2) (1, 0) (1, 2)
(0, 2) (1, 0) (2, 1)
(0, 2) (1, 2) (2, 1)
(1, 0) (1, 2) (2, 1)