programmers.co.kr/learn/courses/30/lessons/72411
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 |