int n = 4; // 전체 개수 int r = 2; // 조합 개수 vector<bool> v(n); fill(v.begin(), v.begin() + r, true); // 처음 r개를 true로 설정 cout << endl; do { for (int i = 0; i < n; ++i) { if (v[i]) { cout << i << " "; } } cout << endl; } while (prev_permutation(v.begin(), v.end()));
recursive
logic
소스 배열
현재 배열
타겟 조합 크기
깊이
종료 조건
타겟 조합 크기에 도달
깊이가 source_arr의 길이보다 큰 경우 (마지막)
#include <iostream> #include <vector> using namespace std; void combine(vector<int>& arr, vector<int>& current, int depth, int k) { if (current.size() == k) { for (int num : current) cout << num << " "; cout << "\n"; return; } for (int i = depth; i < arr.size(); i++) { current.push_back(arr[i]); combine(arr, current, i + 1, k); current.pop_back(); } } int main() { vector<int> arr = {1, 2, 3, 4}; int k = 2; vector<int> current; combine(arr, current, 0, k); return 0; }