본문 바로가기

Coding Test/Programmers

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

728x90

 

 

나의 풀이

from itertools import combinations
from collections import Counter

def solution(orders, course):
    answer = []

    for n in range(len(course)):
        temp = []
        for o in orders:
            temp.extend(''.join(sorted(list(s))) for s in combinations(o, course[n]))

        temp = Counter(temp).most_common()
        for i in temp:
            if temp[0][1] == i[1] > 1:
                answer.append(i[0])

    return sorted(answer)

 

 

라이브러리를 사용하지 않은 풀이

import sys

def dict_update(d, key):
    if key in d:
        d[key] += 1
    else:
        d[key] = 1

def order_update_rec(d, s, i, rst):
    if i == len(s):
        dict_update(d, rst)
    else:
        order_update_rec(d, s, i+1, rst)
        order_update_rec(d, s, i+1, rst+s[i])

def solution(orders, course):
    order_dict = {}
    for order_i in range(len(orders)):
        orders[order_i] = sorted(orders[order_i])
        order_update_rec(order_dict, orders[order_i], 0, "")

    result = []
    max_v = [ 0 for _ in range(len(course)) ]
    max_key = [ [] for _ in range(len(course)) ]
    for key in order_dict:
        for course_i, course_n in enumerate(course):
            if len(key) == course_n:
                if order_dict[key] > max_v[course_i]:
                    max_v[course_i] = order_dict[key]
                    max_key[course_i] = [key]
                elif order_dict[key] == max_v[course_i]:
                    max_key[course_i].append(key)
    for i, v in enumerate(max_v):
        if v >= 2:
            result += max_key[i]

    return sorted(result)
반응형