practivceAlgorithm/programmers

[Programmers][Python] Kakao 2019 후보키

findTheValue 2021. 10. 28. 20:02

조합 검사 중 조건을 만족할 시 조합의 부분조합을 구해 중복되는것이 있으면 세주지 않았습니다.

 

from itertools import combinations

def solution(relation): 
    n = len(relation[0])
    cnt = 0
    checked = set()
    for i in range(1, n + 1):
        for comb in combinations([k for k in range(n)], i):
            dicts = set()
            tmp = []
            for row in relation:
                tmp.append(''.join(row[each] for each in comb))
            flag = 0
            for c in tmp:
                if flag: break
                if c not in dicts:
                    dicts.add(c)
                else:
                    flag = 1
                    break
            if not flag:
                flag = 0
                for i in range(1, len(comb)):
                    if flag: break
                    for com in combinations(list(comb), i):
                        if com in checked:
                            flag = 1
                            break
                if not flag:
                    checked.add(comb)
                    cnt += 1
    return cnt