ALGORITHM/Kakao

2019 KAKAO BLIND RECRUITMENT 후보키 (실패코드)

김쿸후 2021. 3. 27. 01:21

 

1. 문제

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

 

2. 풀이

파이썬의 combinations 기능을 이용하여 모든 조합을 구한다. 

모든 조합을 구해서 부분집합인 답안을 빼려 했다. 

그 후 모든 답안의 개수를 answer에 집어넣는다. 

 

3. 코드

from itertools import combinations


def solution(relation):
    answerList = []
    
    # 모든 경우 구하기
    N =[]
    for i in range(len(relation)):
        N.append(i+1)
        
    allList = []
    for i in range(len(N)):
        combi = list(combinations(N, i))
        for j in combi:
            combielement = []
            for k in j:
                combielement.append(k)
            allList.append(combielement)
    

    for i in allList:
        a = []
        for j in relation:
            element = ''
            for k in range(len(i)):
                element += j[i[k]-1]
            a.append(element)
        b = set(a)
        c = list(b)
        if(len(a) == len(c)):
            answerList.append(i)
    
    answerList.sort()
    
    for i in range(len(answerList)):
        for j in range(i,len(answerList)):
            if len(answerList) <= j:
                break;
            s1 = set(answerList[i])
            s2 = set(answerList[j])
            if s1 == s1.intersection(s2):
                del answerList[j]
                j = j-1
                
    answer = len(answerList)
    return answer

4. 그외

파이썬 코드가 손에 안익어서 수도코드는 다 짰는데 자꾸 구현에 실패한다.. 

조급해하지말고 노력하면 되겠지..ㅠㅠ