from itertools import combinations
data = [
["100", "ryan", "music", "2"],
["200", "apeach", "math", "2"],
["300", "tube", "computer", "3"],
["400", "con", "computer", "4"],
["500", "muzi", "music", "3"],
["600", "apeach", "music", "2"],
]
def solution(relation):
col_size = len(relation[0])
row_size = len(relation)
check_list = []
# 유일성 검사
for i in range(1, col_size + 1):
comb_attribute = combinations(range(col_size), i)
print(list(comb_attribute))
for check_comb in list(comb_attribute):
all_attr_list = [
tuple(row[index] for index in check_comb) for row in relation
]
if len(set(all_attr_list)) != row_size:
continue
else:
check_list.append(set(check_comb))
# 최소성 검사
for item_1 in check_list[:]:
for item_2 in check_list[:]:
if item_1 != item_2:
if item_1 == item_1 & item_2:
check_list.remove(item_2)
solution(data)
col_size = len(relation[0])
for i in range(1, col_size+1):
comb_attribute = combinations(range(col_size), i)
for check_comb in list(comb_attribute):
...
all_attr_list = [tuple(row[index] for index in check_comb) for row in relation]
for item_1 in check_list[:]:
for item_2 in check_list[:]:
if item_1 != item_2:
if item_1 == item_1 & item_2:
check_list.remove(item_2)
알고리즘 문제 복습 언제하지...? 이메일에 쌓인 Weekly 글도 읽어야 하는데... 큰일났네