나의 개발일지

[프로그래머스] Lv.2 메뉴 리뉴얼 [Python, 파이썬] KAKAO 본문

프로그래머스

[프로그래머스] Lv.2 메뉴 리뉴얼 [Python, 파이썬] KAKAO

YoonJuHan 2023. 10. 7. 16:03
  • 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/72411
  • 🔑 combinations(), Counter(), Counter.most_common()
    • 코스 요리를 구성하려는 메뉴 개수로 손님들의 주문 중에서 조합을 구성하고 저장한다.
    • collections모듈의 Counter를 사용하면 리스트, 딕셔너리, 문자열 등에서 데이터 개수를 쉽게 셀 수 있다.
    • Counter클래스의 most_common() 함수는 인자로 숫자 하나를 받는다.
    • 1 = 가장 개수가 많은 1개의 (key, value)를 반환
    • 2 = 가장 개수가 많은 2개의 (key, value)를 반환..
    • 여기선 최댓값만 구한 후 이와 같은 개수를 가지고 2개 이상인 조합을 정답 리스트에 추가하면 끝

 

from itertools import combinations
from collections import Counter

def solution(orders, course):

    answer = []

    for c in course :   # 조합을 구성하는 크기
        temp = []
        for o in orders :   # 손님이 주문한 단품메뉴들에 대해
            combi = combinations(sorted(o),c) # c개를 고르는 조합 구성  
            temp.extend(combi)  # 조합들 저장
            
        cnt_dict = Counter(temp)    # 조합 별 개수를 센다. 조합 : 개수 형태의 딕셔너리 반환
        
        if cnt_dict:    # 딕셔너리가 비어있지 않을 때
            m = cnt_dict.most_common(1)[0][1]   # 가장 많이 나온 조합의 개수를 찾았다.
            for k, v in cnt_dict.items():
                if v >= 2 and v == m:           # 개수가 2개 이상 and 최대 개수와 동일한 값을 정답에 추가
                    answer.append("".join(list(k)))

    return sorted(answer)
Comments