programmers.co.kr/learn/courses/30/lessons/72411
코딩테스트 연습 - 메뉴 리뉴얼
레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서
programmers.co.kr
Python으로 프로그래머스 '메뉴 리뉴얼' 문제를 풀어봤습니다.
크게 3가지 IDEA가 필요한 문제였습니다.
저는 Python 기본 라이브러리인 itertools와 collections로 조합과, 조합별 Count를 구해 문제를 풀었습니다.
import itertools
import collections
def solution(orders, course):
# course 개수별 결과를 저장할 list
top_course = [[]] * 11
for course_count in course:
tmp_combi = []
for order in orders:
if len(order) >= course_count:
combi_course = itertools.combinations(list(order), course_count)
for combi in combi_course:
combi = sorted(combi)
combi = tuple(combi)
tmp_combi.append(combi)
# 조합이 있는 경우에만 확인
if tmp_combi:
tmp_combi = collections.Counter(tmp_combi)
max_count = max(tmp_combi.values())
if max_count > 1:
max_cases = []
for key, value in tmp_combi.items():
if value == max_count:
max_case = list(key)
max_case.sort()
max_case = "".join(max_case)
max_cases.append(max_case)
top_course[course_count] = max_cases
# 리스트 풀어주기
recommand_list = []
for recommand in top_course:
for x in recommand:
recommand_list.append(x)
# 정렬
recommand_list.sort()
return recommand_list
case_1 = ["ABCFG", "AC", "CDE", "ACDE", "BCFG", "ACDEH"]
course_1 = [2, 3, 4]
case_2 = ["ABCDE", "AB", "CD", "ADE", "XYZ", "XYZ", "ACD"]
course_2 = [2, 3, 5]
case_3 = ["XYZ", "XWY", "WXA"]
course_3 = [2, 3, 4]
print(solution(case_1, course_1))
print(solution(case_2, course_2))
print(solution(case_3, course_3))
""" Out put
>>> ['AC', 'ACDE', 'BCFG', 'CDE']
>>> ['ACD', 'AD', 'ADE', 'CD', 'XYZ']
>>> ['WX', 'XY']
"""
궁금하신 사항은 댓글 남겨주세요.
감사합니다.
[프로그래머스] 멀쩡한 사각형 with Python (0) | 2021.04.04 |
---|---|
[백준] 12865번 평범한배낭 풀이 (중복미허용 냅색) (0) | 2021.01.03 |
[알고리즘풀이] 프로그래머스 문자열 압축 (Kakao) (0) | 2020.08.09 |
[백준] 14502번: 연구소 풀이 with Python (3) | 2019.11.04 |
[알고리즘 풀이] 프로그래머스 쇠막대기, Level 2(스택/큐) (0) | 2019.05.05 |