diff --git "a/mj010504/Programmers/\355\233\204\353\263\264\355\202\244.cpp" "b/mj010504/Programmers/\355\233\204\353\263\264\355\202\244.cpp" new file mode 100644 index 0000000..95e1246 --- /dev/null +++ "b/mj010504/Programmers/\355\233\204\353\263\264\355\202\244.cpp" @@ -0,0 +1,52 @@ +#include + +using namespace std; +set> s; + +bool isMinimal(vector tv) { + int n = tv.size(); + for(int i = 0; i < (1 << n); i++) { + vector ttv; + for(int j = 0; j < n; j++) { + if(i & (1 << j)) ttv.push_back(tv[j]); + if(s.count(ttv) == 1) return false; + } + + if(s.count(ttv) == 1) return false; + } + + return true; +} + +int solution(vector> v) { + int n = v.size(); + int m = v[0].size(); + + + for(int i = 0; i < (1 << m); i++) { + vector tv; + for(int j = 0; j < m; j++) { + if(i & (1 << j)) { + tv.push_back(j); + } + } + + if(!isMinimal(tv)) continue; // 최소성 만족 + + set> ts; + for(int k = 0; k < n; k++) { + vector sv; + for(int l = 0; l < tv.size(); l++) { + sv.push_back(v[k][tv[l]]); + } + + ts.insert(sv); + } + + if(ts.size() == n) { // 유일성 만족 + s.insert(tv); + } + } + + return s.size(); +}