728x90
https://programmers.co.kr/learn/courses/30/lessons/72411
- 생각
- from collections import Counter
- 중복된 거 갯수 세서 dictionary 형태로 만들어준다.
- 문제를 제대로 이해하지 못해 1시간 넘게 잘못된 코드를 짬... 힘들었다. 문제가 기니깐 집중력이 많이 떨어지는 듯
- 가장 많이 함께 주문된 단품메뉴 조합을 ABC가 메뉴 구성에 있으면 AB,BC,AC는 들어가면 안된다고 생각함...ㅜ
- 코드 계획
- 각 손님이 주문한 단품메뉴 조합으로 요리 개수가 n인 코스를 만듦
- 중복된 거 갯수를 세서 dictionary 형태로 만들기
- 해당주문이 나온 적이 없거나 해당 조합을 주문한 사람이 1명 이하면 pass
- 3번이 아니라면 가장 많이 주문한 조합을 추가
- 만약 가장 많이 주문한 조합이 여러개면 다 넣기
- from collections import Counter
- 코드
from itertools import combinations
from collections import Counter
def solution(orders, course):
# 손님의 메뉴 조합으로 만들 수 있는 모든 코스
answer = []
for n in course:
cooks = []
for order in orders:
# 손님의 메뉴 조합으로 만들 수 있는 코스 중 코스 길이가 n인 코스
cook = list(combinations(sorted(order),n))
cooks += cook
# 중복된거 갯수 세기
cnt = Counter(cooks)
# (해당 주문 조합이 나온적이 없거나, 해당 조합을 주문한 사람이 1명인 경우)가 아니라면
if len(cnt) != 0 and max(cnt.values()) != 1:
for c in cnt:
# 가장 많이 함께 주문된 단품메뉴 조합!!!
# 가장 많이 함께 주문된 메뉴 구성이 여러 개라면, 모두 배열에 담기
if cnt[c] == max(cnt.values()):
answer += ["".join(c)]
return sorted(answer)
728x90
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
[백준] 2579. 계단 오르기 - Python (0) | 2022.06.24 |
---|---|
[백준] 1654. 랜선 자르기 - Python (0) | 2022.06.23 |
[백준] 11047. 동전 0 - Python (0) | 2022.06.22 |
[백준] 11399. ATM - Python (0) | 2022.06.22 |
[백준] 15654. N과 M (5) ~ (8) - Python (0) | 2022.06.21 |
댓글