
코드 분석 필요
#include <iostream>
#include <vector>
using namespace std;
#include <set>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
void find_partitions(std::vector<std::string>& items, int index, std::vector<std::vector<std::string>>& groups) {
// 모든 항목이 할당되었을 때
if (index == items.size()) {
std::cout << "{ ";
for (const auto& group : groups) {
if (!group.empty()) {
std::cout << "{";
for (size_t i = 0; i < group.size(); ++i) {
std::cout << group[i] << (i < group.size() - 1 ? ", " : "");
}
std::cout << "} ";
}
}
std::cout << "}" << std::endl;
return;
}
// 현재 항목을 3개의 그룹 중 하나에 추가
for (int i = 0; i < 3; ++i) {
groups[i].push_back(items[index]);
find_partitions(items, index + 1, groups);
groups[i].pop_back(); // 백트래킹
}
}
int main() {
std::vector<std::string> items = { "A", "B", "C", "D" };
std::vector<std::vector<std::string>> groups(3);
find_partitions(items, 0, groups);
return 0;
}
