티스토리 뷰
문제
문제 바로가기: [프로그래머스] 2019 KAKAO BLIND RECRUITMENT - 후보키
풀이
#문제를 이해를 못해서 시간을 엄청 잡아먹었다....
#조합, 중복
#주의1
1. 최소성이 되어야한다는 뜻은 ["학번"]도 후보키가 될 수있고, ["학번", "이름"]도 후보키가 될 수 있을 때 먼저 가장 적은 갯수의 조합으로 후보키를 구한다
#주의2 (여기서 너무 헷갈렸다)
1. 예를 들어, ["학번"]을 후보키로 구했다고 했을 때, 그 후에는 ["학번"]이 다른 후보키에 들어가면 안되기 때문에 ["학번", "..."], ["학번", "...", "..."]은 후보키가 될 수 없다
2. 다른 예시로, ["학번, "이름"]을 후보키로 구했다고 했을 때, 그 후에는 ["학번", "이름", "..."], ["학번", "이름", "...", "..."]은 후보키가 될 수 없다
3. 하지만, ["학번", "이름"]을 후보키로 구했다고 했을 때, 그 후에는 ["학번", "..."], ["이름", "..."]은 후보키가 될 수 있다
4. 따라서 마지막 예시로,
0 1 2 3 4
[["100", "abc", "efg", "c", "z"],
["200", "abc", "hij", "c", "y"],
["300", "abc", "efg", "d", "z"],
["400", "abcd", "hij", "d", "z"]]
처럼 있을 때 후보키가 될 수 있는 조합은 [0], [2,3], [1,3,4] 로 답이 3이 된다
#풀이
1. 최소성을 만족해야하기 때문에 조합의 개수 1개부터 시작한다
- 조합의 갯수 1개일 때(인덱스 이용) 모든 조합은 [0] ,[1] ,[2] ,[3] 이다
2. 각 조합의 값이 중복값이 있는지 유일성 검사를 한다
- 딕셔너리와 최종 길이를 이용했지만, 방법은 매우 많을 것 같다
- (여러개의 인덱스 조합일 때는 단순히 문자열로 이어붙여서 진행했다)
3. 최소성 검사를 진행한다
- 위의 주의에서 말했듯이, 이미 구한 후보키가 속해있는지 검사한다
- 후보키를 구했다면, 후보키 조합을 저장해둔다
4. 과정1로 돌아가서 조합의 개수 1개부터 늘려가면서 최대 조합의 갯수( len(relations[0]) )까지 반복하여 구한다
코드
from itertools import combinations
def solution(relations):
key_index = [] #인덱스로 초기화
for i in range(len(relations[0])):
key_index.append(i)
answer = []
count = 1 #조합요소 1개부터 늘려가면서 계산
while True:
for com in list(combinations(key_index, count)):
dictionary = {}
for relation in relations:
key_value = ""
for co in com:
key_value += (relation[co]+' ') #여러개의 인덱스 조합일 경우, 문자열로 이어붙였다
if key_value not in dictionary:
dictionary[key_value] = 1
#유일성 검사
if len(relations) == len(dictionary):
#최소성 검사
check = 1
for ans in answer:
check2 = 0
for an in ans:
if an in com:
check2 += 1
if check2 == len(ans):
check = 0
if check == 1:
answer.append(com)
count += 1
if count == len(relations[0])+1:
break
return len(answer)
결과
'알고리즘' 카테고리의 다른 글
[파이썬, 백준 20056] 마법사 상어와 파이어볼 (0) | 2022.07.11 |
---|---|
[파이썬, 프로그래머스] 순위 검색 - 2021 KAKAO BLIND RECRUITMENT (0) | 2022.06.26 |
[파이썬, 프로그래머스] 메뉴 리뉴얼 - 2021 KAKAO BLIND RECRUITMENT (0) | 2022.06.24 |
[파이썬] 2021 카카오 채용연계형 인턴십 - 표 편집 (0) | 2022.06.16 |
[파이썬] 2020 카카오 인턴십 - 보석 쇼핑 (0) | 2022.06.15 |
- Total
- Today
- Yesterday