From 2c2d92b531a573af620c3defb5c73d0509dd37f2 Mon Sep 17 00:00:00 2001 From: dls4585 Date: Mon, 29 Nov 2021 19:08:42 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[=EB=B0=B1=EC=9D=B8=EC=B0=AC]=20=ED=9B=84?= =?UTF-8?q?=EB=B3=B4=ED=82=A4=20(=EC=A7=84=ED=96=89=EC=A4=91)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\353\260\261\354\235\270\354\260\254.java" | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 "solution/Programmers_\355\233\204\353\263\264\355\202\244/\353\260\261\354\235\270\354\260\254.java" diff --git "a/solution/Programmers_\355\233\204\353\263\264\355\202\244/\353\260\261\354\235\270\354\260\254.java" "b/solution/Programmers_\355\233\204\353\263\264\355\202\244/\353\260\261\354\235\270\354\260\254.java" new file mode 100644 index 0000000..d387a47 --- /dev/null +++ "b/solution/Programmers_\355\233\204\353\263\264\355\202\244/\353\260\261\354\235\270\354\260\254.java" @@ -0,0 +1,84 @@ +package DAILY; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +class Solution2 { + static int columns; + static boolean[] uniqueness; + static List[] minimalWith; + static boolean[] minimality; + static boolean[] selected; + static class Pair { + List keys; + + public Pair() { + keys = new ArrayList<>(); + } + } + public int solution(String[][] relation) { + columns = relation[0].length; + uniqueness = new boolean[columns]; + minimality = new boolean[columns]; + minimalWith = new List[columns]; + for (int i = 0; i < columns; i++) { + minimalWith[i] = new ArrayList(); + } + int answer = 0; + for (int i = 0; i < columns; i++) { + if(checkUniqueness(relation, i)) { + uniqueness[i] = true; + minimality[i] = true; + minimalWith[i].add(i); + answer++; + } + } + for (int i = 2; i <= columns; i++) { + selected = new boolean[columns]; + for (int j = 0; j < columns; j++) { + if(uniqueness[j]) continue; + + } + } + + return answer; + } + public static void makeChunk(int now, int count, final int max) { + if(count == max) { + Pair pair = new Pair(); + for (int i = 0; i < columns; i++) { + if(selected[i]) { + pair.keys.add(i); + } + } + + } + for (int i = now; i < columns; i++) { + if(selected[now]) continue; + if(minimality[now]) continue; + selected[now] = true; + makeChunk(now, count + 1, max); + selected[now] = false; + } + } + + public static boolean checkMinimality(Pair pair) { + + } + public static boolean checkUniqueness(String[][] relation, int column) { + Set set = new HashSet<>(); + for (String[] row : relation) { + set.add(row[column]); + } + return set.size() == relation.length; + } +} + + +public class programmers_후보키 { + public static void main(String[] args) { + + } +} From e1c19567483469ebca55b99557fc4425b49248b3 Mon Sep 17 00:00:00 2001 From: dls4585 Date: Wed, 1 Dec 2021 09:38:29 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[=EB=B0=B1=EC=9D=B8=EC=B0=AC]=20=ED=9B=84?= =?UTF-8?q?=EB=B3=B4=ED=82=A4=20(=EC=84=B1=EA=B3=B5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\353\260\261\354\235\270\354\260\254.java" | 87 +++++++++++-------- 1 file changed, 51 insertions(+), 36 deletions(-) diff --git "a/solution/Programmers_\355\233\204\353\263\264\355\202\244/\353\260\261\354\235\270\354\260\254.java" "b/solution/Programmers_\355\233\204\353\263\264\355\202\244/\353\260\261\354\235\270\354\260\254.java" index d387a47..cf8a21f 100644 --- "a/solution/Programmers_\355\233\204\353\263\264\355\202\244/\353\260\261\354\235\270\354\260\254.java" +++ "b/solution/Programmers_\355\233\204\353\263\264\355\202\244/\353\260\261\354\235\270\354\260\254.java" @@ -1,15 +1,11 @@ -package DAILY; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; -class Solution2 { +class Solution { + static String[][] table; static int columns; static boolean[] uniqueness; - static List[] minimalWith; - static boolean[] minimality; + static boolean[] selected; static class Pair { List keys; @@ -18,20 +14,24 @@ public Pair() { keys = new ArrayList<>(); } } + static List> compositeKeys; + public int solution(String[][] relation) { - columns = relation[0].length; + table = relation; + columns = table[0].length; + compositeKeys = new ArrayList<>(); uniqueness = new boolean[columns]; - minimality = new boolean[columns]; - minimalWith = new List[columns]; - for (int i = 0; i < columns; i++) { - minimalWith[i] = new ArrayList(); - } + int answer = 0; + + // uniqueness 체크 for (int i = 0; i < columns; i++) { - if(checkUniqueness(relation, i)) { + if(checkUniquenessByOne(i)) { uniqueness[i] = true; - minimality[i] = true; - minimalWith[i].add(i); + + List temp = new ArrayList<>(); + temp.add(i); + compositeKeys.add(temp); answer++; } } @@ -39,13 +39,14 @@ public int solution(String[][] relation) { selected = new boolean[columns]; for (int j = 0; j < columns; j++) { if(uniqueness[j]) continue; - + makeCompositeKey(j, 0, i); } } - return answer; + + return compositeKeys.size(); } - public static void makeChunk(int now, int count, final int max) { + public static void makeCompositeKey(int now, int count, final int max) { if(count == max) { Pair pair = new Pair(); for (int i = 0; i < columns; i++) { @@ -53,32 +54,46 @@ public static void makeChunk(int now, int count, final int max) { pair.keys.add(i); } } - + if(checkMinimality(pair)) { + if(checkUniquenessByCompositeKey(pair)) { + compositeKeys.add(new ArrayList<>(pair.keys)); + } + } } for (int i = now; i < columns; i++) { - if(selected[now]) continue; - if(minimality[now]) continue; - selected[now] = true; - makeChunk(now, count + 1, max); - selected[now] = false; + if(selected[i]) continue; + if(uniqueness[i]) continue; + selected[i] = true; + makeCompositeKey(now, count + 1, max); + selected[i] = false; } } public static boolean checkMinimality(Pair pair) { + for (List key : compositeKeys) { + if(pair.keys.containsAll(key)) { + return false; + } + } + return true; + } + public static boolean checkUniquenessByCompositeKey(Pair pair) { + Set> set = new HashSet<>(); + for (String[] row: table) { + List temp = new ArrayList<>(); + for (int column : pair.keys) { + temp.add(row[column]); + } + set.add(temp); + } + return set.size() == table.length; } - public static boolean checkUniqueness(String[][] relation, int column) { + public static boolean checkUniquenessByOne(int column) { Set set = new HashSet<>(); - for (String[] row : relation) { + for (String[] row : table) { set.add(row[column]); } - return set.size() == relation.length; - } -} - - -public class programmers_후보키 { - public static void main(String[] args) { - + return set.size() == table.length; } }