From d09cdfcc09a305be427bc2bdccb5225832329386 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B5=9C=EB=AF=BC=EC=A4=80?= <68235719+mj010504@users.noreply.github.com> Date: Thu, 11 Sep 2025 23:35:20 +0900 Subject: [PATCH] =?UTF-8?q?Create=20=ED=9B=84=EB=B3=B4=ED=82=A4.cpp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\355\233\204\353\263\264\355\202\244.cpp" | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 "mj010504/Programmers/\355\233\204\353\263\264\355\202\244.cpp" 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(); +}