Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 백준 #백준2217 #백준로프 #python
- 카카오 #프로그래머스 #python #코딩테스트 #오픈채팅방
- 프로그래머스 #네트워크 #c++ #코딩테스트 #코테 #코테준비 #dfs
- 동
- 카카오 코테
- 프로그래머스 #c++ #코딩테스트
- 그리디알고리즘 #그리디 #백준 #우선순위큐 #최소힙 #최대힙 #알고리즘 #코딩테스트 #python
- 프로그래머스 #sql #mysql #코딩테스트
- 프로그래머스 #NULL 처리하기
- 프로그래머스 #python #코딩테스트 #코테공부 #알고리즘 #dict
- 백준 #백준알고리즘 #알고리즘 #코딩테스트 #코딩테스트준비 #코테준비 #백준2110 #python #문제풀이
- 백준 #이거다시풀기
- 프로그래머스 #python #2021카카오 #카카오코테 #카카오인턴쉽
Archives
- Today
- Total
say repository
[프로그래머스] 후보키 python (*) 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/42890
출처 : 프로그래머스
코딩테스트 연습 - 후보키
[["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
코드
from itertools import combinations
def solution(relation):
row = len(relation)
col = len(relation[0])
comb = []
# 모든 후보키 경우의 수
for c in range(1, col+1):
comb.extend(combinations(range(col), c))
candidate_keys = []
for c in comb:
tmp = [tuple(rela[cc] for cc in c) for rela in relation]
# print(tmp)
# 유일성 : 중복 제거
if len(set(tmp)) == row:
flag = True
# 최소성
for k in candidate_keys:
if set(k).issubset(set(c)):
flag = False
break
if flag:
candidate_keys.append(c)
return len(candidate_keys)
풀이
relation의 열과 행의 개수를 모두 구해둔다.
그리고 가능한 후보키의 인덱스 조합을 모두 구해둔다.
후보키를 구할 때는, 유일성을 먼저 고려해보고 유일성을 고려한 조합 중에서 최소성을 만족하는 키만 candidate_keys에 삽입한 후,
이 배열의 길이를 return 해준다.
가능한 후보키의 인덱스 조합에 해당하는 relation의 값을 tuple 리스트로 tmp에 저장한다.
tmp에 set()을 적용하여 중복을 제거하고, row와 길이가 같다면 유일성을 만족한다.
이렇게 유일성을 만족하는 조합이 조합의 부분집합인지 issubset()을 사용해 확인한다.
부분집합이면 최소성을 만족하지 않으므로 flag 를 False 로 표시해준다.
유일성과 최소성을 모두 만족해야 flag가 True 이다.
이 key만 최종적으로 후보키가 될 수 있다.
배운 점
- issubset() : 부분집합인지 확인
- issuperset() : 상위집합인지 확인
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [1차] 캐시 python (0) | 2022.06.11 |
---|---|
[프로그래머스] 가장 큰 정사각형 찾기 python (*) (0) | 2022.06.11 |
[프로그래머스] 파일명 정렬 Python (0) | 2022.06.10 |
[프로그래머스] 방금그곡 python (0) | 2022.06.09 |
[프로그래머스] 순위 검색 python (*) (0) | 2022.05.28 |