https://programmers.co.kr/learn/courses/30/lessons/72411
코딩테스트 연습 - 메뉴 리뉴얼
레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서
programmers.co.kr
from itertools import combinations
def check_combination(cou_comb):
comb_list = [] #조합을 리스트로 변환시킵니다.
for cc in cou_comb:
for c in cc:
comb_list.append(c)
comb_set = set(comb_list) #이를 다시 세트로 바꿔 겹치는것을 없애줍니다.
check_list = [] #최대로 나온 조합을 넣을 빈리스트입니다.
max_num = 0 #조합의 최대 등장 횟수입니다.
for cs in comb_set:
check_list.append([cs, comb_list.count(cs)])#각 set에 대해 등장횟수를 세어줍니다.
if comb_list.count(cs) > max_num: #최대 등장 횟수를 업데이트 해줍니다.
max_num = comb_list.count(cs)
answer = []
if max_num >= 2: #1번 등장한건 의미가 없습니다. 문제 조건입니다.
for cl in check_list:
if cl[1] == max_num:
answer.append("".join(cl[0]))
return answer
def solution(orders, course):
answers = [] #최종 제출될 정답입니다.
#1. orders의 각 항목을 정렬시킵니다. 이는 추후 조합을 할때 겹침이 없기 위함입니다.
for i in range(len(orders)):
orders[i] = "".join(sorted(orders[i]))
#2. 조합을 생성합니다.
for cou in course:
cou_comb = [] #각 course마다 조합 리스트를 만듭니다.
for order in orders:
if len(order) >= cou: #최대한 적게 돌리기위해 cou보다 클때만 조합을 생성합니다.
cou_comb.append(list(combinations(order,cou)))
else: pass
if not len(cou_comb): #조합이 없을경우 넘어갑니다.
pass
else:
answer = check_combination(cou_comb) #조합이 있을경우 확인합니다.
if answer != None:
for ans in answer:
answers.append(ans)
answers.sort()
return answers
'파이썬 코딩테스트 > 프로그래머스' 카테고리의 다른 글
프로그래머스 / 수식 최대화 / 파이썬 (0) | 2022.02.18 |
---|---|
프로그래머스 / 주차 요금 계산 / 파이썬 (0) | 2022.02.18 |
프로그래머스 / 멀쩡한 사각형 / 파이썬 (0) | 2022.02.13 |
프로그래머스 / 괄호 변환 / 파이썬 (0) | 2022.02.13 |
프로그래머스 / 124의 나라 / 파이썬 (0) | 2022.02.13 |