문제 출처: https://www.programmers.co.kr/learn/courses/30/lessons/72411
코딩테스트 연습 - 메뉴 리뉴얼
레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서
programmers.co.kr
2021 KAKAO BLIND RECRUITMENT 메뉴 리뉴얼 (LEVEL 2)
1. 알고리즘
- 스카피가 만들고자 하는 코스요리 구성 단품메뉴 갯수 리스트를 기준으로 반복문 시작
- 각 단품메뉴 구성 별 갯수를 저장할 orders_dict, 손님들이 주문한 단품메뉴들의 조합을 저장할 comb_list 선언
- 각 주문 별로, 코스요리 구성 메뉴 갯수에 따라 comb_list저장
- 메뉴 조합들을 따라 orders_dict에 갯수 갱신
- 각 메뉴구성도 오름차순이어야 하므로 sort()함수 정렬
- list 변환한 combinations 결과는 ['C', 'D']와 같은 형태이기 때문에 string 값으로 변환
- orders_dict 메뉴 구성의 갯수 갱신
- 이때, 각 메뉴 구성을 최대 몇 명의 손님이 주문했는지 max_num변수를 사용하여 확인
- max_num에 따라 가장 많은 손님이 주문한 횟수의 코스 요리 구성을 코스요리 구성 리스트(answer)에 추가
- 코스 요리 구성도 오름차순 정렬되어야 하므로 sorted(answer)로 정렬하여 반환
2. 유의사항
- 스카피가 만들고자 하는 코스요리의 단품메뉴 구성 갯수 별 모든 조합을 구하고, 그 조합 내에서 가장 많이 주문된 횟수를 구해야 함
- EX) 스카피 코스[2, 3] ▶ 각 주문마다 가능한 2가지 조합 중 가장 많았던 구성, 각 주문마다 가능한 3가지 조합 중 가장 많았던 구성
- [ABCD], [BCD] 주문 중 2가지 조합([AB], [BC], [CD], [AC], [AD], [BD], [BC], [CD], [BD]) 중 가장 많았던 구성([BC], [CD]). 가장 많이 나온 구성의 갯수가 같으면 모두 반환([BC], [CD] 모두 정답)
- 각 메뉴 구성도 오름차순이어야 하고, 코스 요리 구성 리스트도 오름차순이어야 함.
3. 어려웠던 점, 해결 방법
- 문제 해석에 어려움을 겪었음. 질문하기 게시판 참고해서 문제 해석함
4. 소스코드
상세 코드 설명은 주석
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
from collections import defaultdict
from itertools import combinations
def solution(orders, course):
answer = []
#각 코스요리 구성 갯수로 반복문
for course_num in course:
#코스 요리 조합 별 갯수 확인용 딕셔너리
orders_dict = defaultdict(int)
#주문 조합 저장 리스트
comb_list = []
#각 주문 당 반복
for order in orders:
#코스요리 구성 메뉴 갯수로 이루어진 주문 조합 list로 변환, 리스트에 요소 저장
comb_list.extend(list(map(list, combinations(order, course_num))))
max_num = 0
#각 조합 당 반복
for comb in comb_list:
#조합 오름차순 정렬
comb.sort()
#조합 데이터 string으로 변환
comb_string = ''.join(comb)
#딕셔너리에 각 조합 당 주문 횟수 갱신
orders_dict[comb_string] += 1
#주문 횟수의 최댓값 갱신
if orders_dict[comb_string] != 1:
max_num = max(max_num, orders_dict[comb_string])
#가장 많이 주문된 단품메뉴 구성을 answer리스트에 추가
answer.extend([x[0] for x in orders_dict.items() if x[1] == max_num])
#오름차순 정렬, 반환
return sorted(answer)
|
cs |
5. 고민
'Algorithms > 프로그래머스' 카테고리의 다른 글
정수 삼각형 with Python (0) | 2021.05.05 |
---|---|
[1차] 프렌즈4블록 with Python (0) | 2021.04.28 |
댓글