코딩 테스트/문제 풀기
[프로그래머스] 후보키
hazel_
2021. 3. 30. 21:18
programmers.co.kr/learn/courses/30/lessons/42890
from itertools import combinations
def solution(relation):
com=[]
first=[]
for i in range(1,len(relation[0])+1):
com.extend(combinations(range(len(relation[0])), i))
for keys in com:
tmp=[tuple([item[key] for key in keys]) for item in relation]
if len(set(tmp))==len(relation):
first.append(keys)
answer=set(first)
for i in range(len(first)):
for j in range(i+1, len(first)):
if len(first[i]) == len(set(first[i])&set(first[j])):
# discard로 할 경우 first[j]가 없는 경우에도 오류를 띄우지 않아. remove는 오류나
answer.discard(first[j])
print(first[i], first[j])
return len(answer)
참고!
tuple과 list의 차이
1. list는 [] , tuple은 ()
2. list는 생성, 수정, 삭제 가능
tuple은 생성, 수정, 삭제 불가능
위에서 list대신 tuple을 사용한 이유
-> 뒤에서 set형식으로 바꿔서 중복을 없앨건데, list경우 set(list)을 하면
TypeError: unhashable type: 'list'
라는 에러가 뜬다. 그래서 list대신 tuple로 해!