본문 바로가기

알고리즘/Programmers

[Programmers / Python] 메뉴 리뉴얼

문제 이해

다른 사람의 풀이를 보고 이해했습니다. 처음에 2의 대한 조합만 생각했습니다. 하나의 order에 대해서만 생각하는게 아니라 order들 전체의 조합의 수를 만들어야 합니다.

 

코드

from itertools import combinations

def solution(orders, course):
    answer = []
    
    for i in course:
        dict = {}
        jo = []
        for order in orders:
            jo.extend(list(combinations(sorted(order), i)))

        for i in jo:
            str = ''.join(i)
            
            if(str in dict): # 조합 안에 같은 글자가 있다면
                dict[str] += 1
            else:
                dict[str] = 1

        
        for order in dict:
            if( dict[order] == max([dict[order] for order in dict])):
                if(dict[order] > 1):
                    answer.append(order)
        
    answer.sort()
    return answer

한번에 하나의 course만 지정합니다.

 

하나의 order에 대해 하나씩 돌면서 combinations를 해줍니다. 이건 2개, 3개, 4개...씩 조합을만들어 줍니다.

이렇게 만든 조합을 문자열로 합쳐보고 딕셔너리에 넣습니다.

 

만약 딕셔너리에 key의 value가 전체 딕셔너리의 최대값과 같다면 그것은 정답이 됩니다.

 

728x90