개발조아

[프로그래머스] 메뉴 리뉴얼 파이썬 본문

알고리즘/프로그래머스

[프로그래머스] 메뉴 리뉴얼 파이썬

개발조아 2021. 8. 13. 17:42
728x90

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/72411

 

코딩테스트 연습 - 메뉴 리뉴얼

레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서

programmers.co.kr

주어진 메뉴를 주어진 주어진 길이만큼 조합해서 새로운 메뉴를 만들고,

같은 길이의 새로운 메뉴 중 가장 많이 나온 메뉴를 리스트에 담아 정렬해서 리턴하면 된다.

 

주의 할점은

["XYZ", "XWY", "WXA"]

3번 테스트케이스에서 2자리로 메뉴를 만든다고 했을 때

"XW"와 "WX"는 같은 메뉴로 친다.

이것 때문에 계속 답을 못찾고 있었다.

 

새로운 메뉴의 개수의 경우 메뉴명을 키로하는 딕셔너리로 만들어서 체크 했다.

메뉴의 길이는 최대 10이므로 딕셔너리로 구성된 배열로 만들었다.

조합으로 새로운 메뉴를 만들고 "WX"와 "XW"는 같은 메뉴임을 처리하기 위해 정렬해서 키로 만들었다.

 

from itertools import combinations
def solution(orders, course):
    answer = []
    
    menus = [{} for _ in range(11)]
    for order in orders:
        for cnt in course:
            for comb in combinations(order,cnt):
                new_menu = ''.join(sorted(comb))
                
                if new_menu in menus[cnt]:
                    menus[cnt][new_menu] += 1
                else:
                    menus[cnt][new_menu] = 1
    for cnt in course:
        tmp = []
        max_cnt = 0
        for menu,menu_cnt in menus[cnt].items():
            if menu_cnt >= 2 and max_cnt < menu_cnt:
                max_cnt = menu_cnt
                tmp = [menu]
            elif max_cnt == menu_cnt:
                tmp.append(menu)
        answer += tmp
    answer.sort()
    return answer

 

Comments