풀이
각 order별 길이가 cnt인 만들 수 있는 조합을 전부 만들고 가장 많이 만들어진 조합을 구해 해결했습니다.
이때, 조합이 만들어진 최대 개수가 1이라면 문제의 조건에따라 제외해야합니다.
orders의 안에있는 메뉴들의 순서를 알파벳으로 정렬해야 해결이 됬습니다.
코드
from itertools import combinations
def solution(orders, course):
answer = []
# orders 리스트 안의 내용들을 각각 알파벳 순서대로 정렬
orders = [''.join(sorted(order)) for order in orders]
all_candidate_course_list = dict()
for cnt in course:
for order in orders:
if cnt > len(order):
continue
candidate_course_list = list(map(''.join, combinations(order, cnt)))
for candidate_course in candidate_course_list:
if candidate_course in all_candidate_course_list:
all_candidate_course_list[candidate_course] += 1
else:
all_candidate_course_list[candidate_course] = 1
max_cnt = max(all_candidate_course_list.values())
if max_cnt == 1:
continue
for candidate_course in all_candidate_course_list:
if all_candidate_course_list[candidate_course] == max_cnt:
answer.append(candidate_course)
all_candidate_course_list.clear()
return sorted(answer)
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[Python] 순위 검색 (0) | 2021.03.21 |
---|---|
[Python] 괄호 변환 (0) | 2021.03.21 |
[Python] 문자열 압축 (0) | 2021.03.14 |
[Python] 다트 게임 (0) | 2021.03.07 |
[Python] 실패율 (0) | 2021.03.06 |