본문 바로가기

PS

후보키 2 [2019 KAKAO BLIND RECRUITMENT]

1. 문제 접근 방법

- 내 접근보다 더 나은 접근 방법을 학습해서 정리하는 글이다.

  이 풀이를 참고함으로, 파이썬 자료구조를 어떻게 활용해서 문제를 풀 수 있는지를 알게 되었다.  

  적절한 자료구조를 활용한다는 것은 문제를 효율적으로 푸는데 있어서 매우 중요한 문제이다. 

-> 앞으로 이러한 방향으로의 학습과 적용을 지속적으로 반복해야 한다

 

- combinations를 통해서 조합을 생성할 수 있다

- relation을 순회하면서, 해당하는 값들을 선택해서 tmp 배열을 생성할 수 있다 

- set(x).issubset(set(i))를 통해서 하나가 다른 하나의 subset인지 여부를 확인할 수 있다. 

 

from itertools import combinations

def solution(relation):
    row = len(relation)
    col = len(relation[0])

    #가능한 속성의 모든 인덱스 조합 
    combi = []
    for i in range(1, col+1):
        combi.extend(combinations(range(col), i))
        

    unique = []
    for i in combi:
        tmp = [tuple([item[key] for key in i]) for item in relation]
    
        if len(set(tmp)) == row:    # 유일성
            put = True
            
            for x in unique:
                
                if set(x).issubset(set(i)):  # 최소성
                    put = False
                    break
                    
            if put: unique.append(i)
   
    return len(unique)