Algorithm/python 프로그래머스
파이썬 프로그래머스 : 후보키
✿(๑❛ڡ❛๑)✿
2024. 5. 9. 19:37
728x90
SMALL
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42890
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
- 알고리즘
수 범위가 작아서 모든 경우의 수를 탐색했다. (부루트포스) - 자료구조
column별로 확인하는 것이 더 편리할 것 같아, relation을 전치했다.
만족하는 조합의 결과(튜플)을 저장할 answer set을 정의했다.
from itertools import combinations
def solution(relation):
colum_num=len(relation[0])
index=[i for i in range(colum_num)]
answer=set()
relation = list(map(list, zip(*relation))) #relation 전치
for k in range(1,colum_num+1): #조합 계산 (범위에 주의)
result=[]
for comb in list(combinations(index,k)):
is_subset=False #최소성 확인을 위한 변수
result=list(zip(*[relation[l] for l in comb]))
if len(result)==len(set(result)): #겹치는게 없는 경우
for l in answer:
if set(l).issubset(comb): #최소성의 확인
is_subset=True
break
if is_subset==False:
answer.add(comb)
return len(answer)
결과
테스트 1 〉 통과 (0.04ms, 10.1MB)
테스트 2 〉 통과 (0.05ms, 10MB)
테스트 3 〉 통과 (0.04ms, 10.1MB)
테스트 4 〉 통과 (0.04ms, 10.2MB)
테스트 5 〉 통과 (0.04ms, 10.1MB)
테스트 6 〉 통과 (0.01ms, 10.3MB)
테스트 7 〉 통과 (0.02ms, 10.2MB)
테스트 8 〉 통과 (0.02ms, 10.1MB)
테스트 9 〉 통과 (0.06ms, 10.1MB)
테스트 10 〉 통과 (0.09ms, 10.2MB)
테스트 11 〉 통과 (0.13ms, 10MB)
테스트 12 〉 통과 (0.86ms, 10.3MB)
테스트 13 〉 통과 (0.26ms, 10MB)
테스트 14 〉 통과 (0.04ms, 10.3MB)
테스트 15 〉 통과 (0.05ms, 10.2MB)
테스트 16 〉 통과 (0.04ms, 10.1MB)
테스트 17 〉 통과 (0.05ms, 10.1MB)
테스트 18 〉 통과 (1.18ms, 10.1MB)
테스트 19 〉 통과 (0.70ms, 10.3MB)
테스트 20 〉 통과 (1.21ms, 10.1MB)
테스트 21 〉 통과 (0.73ms, 10.2MB)
테스트 22 〉 통과 (0.71ms, 10.2MB)
테스트 23 〉 통과 (0.09ms, 10.2MB)
테스트 24 〉 통과 (0.79ms, 10.1MB)
테스트 25 〉 통과 (1.01ms, 10.3MB)
테스트 26 〉 통과 (0.75ms, 10.2MB)
테스트 27 〉 통과 (0.18ms, 10.2MB)
테스트 28 〉 통과 (0.16ms, 10.1MB)
덧)
zip사용의 중요성..
728x90
LIST