코테 노트/프로그래머스

Level 2 후보키 <2019 KAKAO BLIND RECRUITMENT> Python 3

화요밍 2021. 9. 2. 18:07
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/42890?language=python3 

 

코딩테스트 연습 - 후보키

[["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

 

최종 코드

 

GitHub - hwayeon351/Programmers-Algorithms: 프로그래머스 알고리즘 소스 코드 모음

프로그래머스 알고리즘 소스 코드 모음. Contribute to hwayeon351/Programmers-Algorithms development by creating an account on GitHub.

github.com

 

from itertools import combinations
def solution(relation):
    answer = 0
    candidate = [[] for _ in range(len(relation[0])+1)]
    attr = [i for i in range(len(relation[0]))]
    for r in range(1, len(attr)+1):
        #1. n C r = 예비 후보키 조합 생성
        combi = combinations(attr, r)
        #2. 각 예비 후보키가 후보키가 될 수 있는지 체크
        for c in combi:
            #2-1. 유일성 체크
            visit = []
            for t in relation:
                data = ""
                for key in c:
                    data += t[key]
                #유일성을 만족하지 않는다
                if data in visit: break
                visit.append(data)
                
            #유일성을 만족한 경우
            #2-2. 최소성 체크
            else:
                new_candi = list(c)
                for i in range(1, len(new_candi)+1):
                    ck = True
                    #현재 후보키
                    for candi in candidate[i]:
                        for a in candi:
                            if a in new_candi: continue
                            else: break
                        #현재 후보키의 모든 속성이 예비 후보키에 있는 경우
                        else:
                            ck = False
                            break
                    if not ck: break
                else:
                    candidate[len(new_candi)].append(new_candi)
    
    for c in candidate:
        answer += len(c)
    return answer

풀이 과정

풀이 시간 47분

 


참고

 

Level 3 매칭 점수 <2019 KAKAO BLIND RECRUITMENT> Python 3

https://programmers.co.kr/learn/courses/30/lessons/42893?language=python3 코딩테스트 연습 - 매칭 점수 매칭 점수 프렌즈 대학교 조교였던 제이지는 허드렛일만 시키는 네오 학과장님의 마수에서 벗어나, 카..

hwayomingdlog.tistory.com

  • 7. 블록 게임 -> 

 

728x90
반응형