일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 16234번
- 베스트엘범
- 프로그래머스
- 경주로 건설
- 파이썬
- 12869번
- 9095번
- 미세먼지 안녕!
- 감소하는 수
- 12865번
- 17144번
- 키패드 누르기
- 어른 상어
- 거울 설치
- SW Expert Academy
- 15686번
- 2020 카카오 인턴십
- 백준 알고리즘
- 빛의 경로 사이클
- 14499번
- python
- 1038번
- 스타트 택시
- 보석 쇼핑
- 19238번
- 1789번
- HTML 기초
- SW ExpertAcademy
- QueryDSL 기초
- 수식 최대화
Archives
- Today
- Total
보물창고 블로그
프로그래머스 메뉴 리뉴얼 풀이 With Python 본문
728x90
문제 링크: https://programmers.co.kr/learn/courses/30/lessons/72411
코딩테스트 연습 - 메뉴 리뉴얼
레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서
programmers.co.kr
문제의 핵심은 조합의 사용에 있습니다. 각 course 마다 손님이 먹을 수 있는 경우가 가장 많은 것을 answer에 넣어야 합니다. 소스코드는 아래와 같습니다.
def solution(orders, course):
answer = []
from itertools import combinations
from collections import defaultdict
for c in course:
coursedict = defaultdict(int)
for order in orders:
if len(order) >= c:
t = sorted(list(order))
for com in combinations(t,c):
coursedict[''.join(com)]+=1
coursedict =sorted(coursedict.items(),key= lambda x: x[1],reverse=True)
if coursedict:
maxi = coursedict[0][1]
if maxi>1:
for candidate in coursedict:
if candidate[1]==maxi:
answer.append(candidate[0])
else:
break
answer.sort()
return answer
for문으로 각 course마다 손님이 course만큼의 음식을 선택할 수 있는 조합을 coursedict에 key 값으로 담아서 가장 높은 빈도수를 maxi 변수에 담고, 빈도수가 maxi인 경우 answer에 추가하고 마지막에 sort를 사용하여 알파벳 순서로 정렬해줍니다. collections 모듈의 Counter 객체를 사용하여 좀 더 쉽게 풀 수도 있습니다.
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 빛의 경로 사이클 풀이 With Python (0) | 2022.02.23 |
---|---|
프로그래머스 K번째수 풀이 With Python (0) | 2022.02.12 |
프로그래머스 베스트엘범 풀이 With Python (0) | 2022.02.12 |
프로그래머스 위장 풀이 With Python (0) | 2022.02.12 |
프로그래머스 전화번호 목록 풀이 With Python (0) | 2022.02.12 |
Comments