[プログラマ]候補鍵
質問リンク
https://programmers.co.kr/learn/courses/30/lessons/42890
問題の説明
に答える
コード#コード# from itertools import combinations
def solution(relation):
candidates = set()
cols = len(relation[0])
for i in range(1, cols + 1):
for combi in combinations(range(cols), i):
if possible(relation, candidates, combi):
candidates.add(combi)
return len(candidates)
def possible(relation, candidates, combi):
# 최소성
for i in range(1, len(combi) + 1):
for combi2 in combinations(combi, i):
if combi2 in candidates:
return False
# 유일성
unique = set()
for line in relation:
curr = []
for i in combi:
curr.append(line[i])
if tuple(curr) in unique:
return False
unique.add(tuple(curr))
return True
Reference
この問題について([プログラマ]候補鍵), 我々は、より多くの情報をここで見つけました
https://velog.io/@leehj8896/프로그래머스-후보키
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
from itertools import combinations
def solution(relation):
candidates = set()
cols = len(relation[0])
for i in range(1, cols + 1):
for combi in combinations(range(cols), i):
if possible(relation, candidates, combi):
candidates.add(combi)
return len(candidates)
def possible(relation, candidates, combi):
# 최소성
for i in range(1, len(combi) + 1):
for combi2 in combinations(combi, i):
if combi2 in candidates:
return False
# 유일성
unique = set()
for line in relation:
curr = []
for i in combi:
curr.append(line[i])
if tuple(curr) in unique:
return False
unique.add(tuple(curr))
return True
Reference
この問題について([プログラマ]候補鍵), 我々は、より多くの情報をここで見つけました https://velog.io/@leehj8896/프로그래머스-후보키テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol