반응형
문제풀이
1. 조합 함수(combination)을 활용하여 가능한 인덱스 조합을 만든다.
2. 각 행에서 1에서 뽑은 인덱스에 해당하는 값들만 추출하여 중복값이 없는지 찾는다. => 유일성
(set에 넣어서 요소의 수를 총 행의 수와 비교한다.)
3. 각 단계에서 추출된 익덱스 집합이 이전에 선택된 인덱스 집합의 부분집합이 되는 경우는 없는지 확인한다. => 최소성
(combination을 통해 추출한 조합의 인덱스 개수는 1부터 늘어남으로 이전에 선택된 인덱스 조합만 확인하면 된다.)
Python Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
from itertools import combinations
def solution(relation):
rows = len(relation)
cols = len(relation[0])
keys = []
for n in range(1,cols+1):
for idxs in combinations(range(cols),n):
# 최소성 and 유일성
if min_check(keys,idxs) and \
len(set(tuple(relation[row][idx] for idx in idxs) for row in range(rows))) == rows :
keys.append(idxs)
return len(keys)
#최소성
def min_check(keys, target):
for k in keys:
if set(k).issubset(set(target)):
return False
return True
|
cs |
문제 링크
코딩테스트 연습 - 후보키
[["100","ryan","music","2"],["200","apeach","math","2"],["300","tube","computer","3"],["400","con","computer","4"],["500","muzi","music","3"],["600","apeach","music","2"]] 2
programmers.co.kr
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 대충 만든 자판 JS (0) | 2023.03.01 |
---|---|
[프로그래머스] 보석 쇼핑 Python (0) | 2022.03.05 |
[프로그래머스] 신고 결과 받기 Python (0) | 2022.01.28 |
[프로그래머스] 메뉴 리뉴얼 Python (0) | 2021.09.26 |
[프로그래머스] 행렬 테두리 회전하기 Python (0) | 2021.09.16 |