[후보키] https://programmers.co.kr/learn/courses/30/lessons/42890

풀고 느낀점
문제를 읽고 대충 부분집합 구해서 풀면 되겠구나 생각했는데, 부분집합 구하는걸 아무리 애를 써도 코딩이 잘 안됐습니다. 그래서 그냥 인터넷에 찾아서 복붙하고 (나중에 실제 코딩 테스트 볼 때 복붙해도 괜찮겠다는 생각입니다. 🤣) 한 반나절 걸려서 푼것 같습니다. 문제가 밑에 있어서 그런지 정답률이 상당히 낮았습니다.
문제에서 후보키 조건중에 유일성 / 최소성이 있는데, 여기서 최소성을 가리는데 contains() 메소드를 사용했는데, 18, 19, 20, 22 예제가 계속 틀리다고 나왔습니다. 그래서 그냥 collection으로 풀어서 cotainsAll() 메소드를 사용했는데 다 통과해버렸습니다. 둘 차이가 뭔지 모르긴하겠는데... 너무 지쳐서 그냥 넘어가는 것도... 괜찮지 않을까요.. ㅎㅎ
(근데 코드 진짜 개판으로 짠듯... ㅎㅎ)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.ArrayList; | |
import java.util.Arrays; | |
import java.util.HashSet; | |
import java.util.LinkedList; | |
import java.util.List; | |
import java.util.Set; | |
public class Problem4 { | |
public static void main(String[] args) { | |
Problem4 problem4 = new Problem4(); | |
System.out.println(problem4.solution( | |
new String[][]{ | |
{"100", "ryan", "music", "2"}, | |
{"200", "apeach", "math", "2"}, | |
{"300", "tube", "computer", "3"}, | |
{"400", "con", "computer", "4"}, | |
{"500", "muzi", "music", "3"}, | |
{"600", "apeach", "music", "2"} | |
} | |
)); | |
} | |
List<String> sets = new ArrayList<>(); | |
List<String> store = new LinkedList<>(); | |
public int solution(String[][] relation) { | |
int[] arr = new int[relation[0].length]; | |
for (int i = 0; i< arr.length ; i++) { | |
arr[i] = i; | |
} | |
bit(arr, relation[0].length); | |
for (String set : sets) { | |
Set<String> valid = new HashSet<>(); | |
String[] split = set.split(":"); | |
if (split[0].equals("")) { | |
continue; | |
} | |
for (String[] strings : relation) { | |
StringBuilder value = new StringBuilder(); | |
for (String s : split) { | |
value.append(strings[Integer.parseInt(s)]); | |
} | |
valid.add(value.toString()); | |
} | |
if (valid.size() == relation.length) { | |
store.add(set); | |
} | |
} | |
Set<String> rStore = new HashSet<>(store); | |
for (int i = 0 ; i < store.size(); i++) { | |
String target = store.get(i); | |
String[] split = target.split(":"); | |
for (int j = i + 1; j < store.size(); j++) { | |
String[] s = store.get(j).split(":"); | |
List<String> a = Arrays.asList(s); | |
if (a.containsAll(Arrays.asList(split))) { | |
rStore.remove(store.get(j)); | |
} | |
} | |
} | |
return rStore.size(); | |
} | |
public void bit(int[] arr, int n) { | |
for (int i = 0; i < 1 << n; i++) { | |
StringBuilder set = new StringBuilder(); | |
for (int j = 0; j < n; j++) { | |
if ((i & 1 << j) != 0) { | |
set.append(arr[j]).append(":"); | |
} | |
} | |
sets.add(set.toString()); | |
} | |
} | |
} |
'Study with book > Algorithms' 카테고리의 다른 글
[2020 카카오 블라인드 온라인 코딩 테스트] 괄호 변환(0) | 2021.03.30 |
---|---|
[2020 카카오 블라인드 온라인 코딩 테스트] 문자열 압축(0) | 2021.03.30 |
[카카오 코드 페스티벌 2018 예선] 인형들(2) | 2020.10.18 |
[백준]설탕 배달(0) | 2020.10.02 |
[백준]괄호(0) | 2020.10.01 |