티스토리 뷰
https://programmers.co.kr/learn/courses/30/lessons/42890
풀이
모든 속성 인덱스의 조합을 구하고 그 조합에 해당하는 속성의 값들을 모아 유일성을 확인한다.
그 조합이 유일성을 만족하는 키들 중에 부분집합으로 포함되는지 체크해서 최소성을 확인한다.
import itertools
def solution(relation):
row = len(relation)
col = len(relation[0])
idx = [i for i in range(col)]
combinations = []
for i in range(1, col+1):
combinations.extend(itertools.combinations(idx, i)) # 모든 속성 인덱스의 조합
unique = []
for combination in combinations:
values = [] # 속성에 해당하는 값
for row in relation:
tmp = [] # 조합에 해당하는 속성의 값을 리스트로 묶음
for i in range(len(combination)):
tmp.append(row[combination[i]])
values.append(tmp)
cnt = True # 유일성 체크
for value in values:
if values.count(value) != 1:
cnt = False
break
if cnt: # 유일성이 만족되면 최소성 체크
flag = True
for key in unique:
if set(key).issubset(combination): # 조합이 유일성을 만족하는 키들 중에 부분집합인지
flag = False # 부분집합이면 최소성 불만족
if flag: # 최소성 만족
unique.append(combination)
return len(unique)
- extend와 append의 차이
ex1 = [1, 2, 3]
ex1.append([4, 5])
print(ex1) # [1, 2, 3, [4, 5])
ex2 = [1, 2, 3]
ex2.extend([4, 5])
print(ex2) # [1, 2, 3, 4, 5]
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] [1차] 프렌즈4블록 - Python (0) | 2022.02.09 |
---|---|
[프로그래머스] N-Queen - Python (0) | 2022.02.07 |
[프로그래머스] 헤비 유저가 소유한 장소 - MySQL (0) | 2021.11.25 |
[프로그래머스] 방금그곡 - Python, Java (0) | 2021.11.12 |
[프로그래머스] 캐시 - Python (0) | 2021.08.19 |