문제
문제 바로가기
후보키를 구하는 문제이다. 후보키의 개념을 알고 있다면, 문제이해가 빠르긴 한데 구현이 더 중요하다.
리뷰
주요 변수는 맞았는데,
for의 전개나 구조가 너무 복잡하게 느껴졌었다.
다른 사람들 코드를 보니 자료구조를 정말 적극적으로 사용한 게 보였다. 반복해서 연습하면 skill 향상이 되지 않을까 한다..
냠냠..
코드
from itertools import combinations
rel = [["100","ryan","music","2"],["200","apeach","math","2"],["300","tube","computer","3"],["400","con","computer","4"],["500","muzi","music","3"],["600","apeach","music","2"]]
result = 2
candidate_key = []
c_cnt = len(rel[0]) # 컬럼수
p_cnt = len(rel) # 사람수
key_idx = list(range(c_cnt))
for i in range(1, c_cnt+1):
candidate_key.extend(combinations(key_idx,i))
unique = []
for ck in candidate_key:
tmp = [tuple([item[i] for i in ck]) for item in rel]
if len(set(tmp)) == p_cnt:
unique.append(ck)
diff = set(unique)
for i in range(len(unique)):
for j in range(i+1, len(unique)):
if len(unique[i]) == len(set(unique[i]).intersection(set(unique[j]))):
diff.discard(unique[j])
print(diff) # {(1, 2), (0,)}
print(len(diff))
'⚡️algorithm' 카테고리의 다른 글
[완전탐색, 브루트포스] 백준 1065. 한수 (0) | 2022.06.06 |
---|---|
[문자열] 프로그래머스 lv2. 방금그곡 (0) | 2022.05.31 |
[스택] 프로그래머스 lv1. 크레인 인형뽑기 게임 (0) | 2022.05.30 |
[문자열] 프로그래머스 lv1. 숫자 문자열과 영단어 (0) | 2022.05.28 |
[문자열] 프로그래머스 lv1. 다트게임 (정규표현식, 10치환, isdecimal, 숫자찾기) (0) | 2022.05.26 |