Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 셀러리
- BFS
- docker
- piplining
- 추천 검색 기능
- 누적합
- next-stock
- 아키텍쳐 개선
- langgraph
- 크롤링
- 구현
- ipo 매매자동화
- 디버깅
- 이분탐색
- 몽고 인덱스
- 알람시스템
- 프로그래머스
- 카카오
- JPA
- gRPC
- AWS
- spring event
- 쿠키
- 결제서비스
- 백준
- dau 3만명
- 관측가능성
- ai agent
- 베타적락
- 완전탐색
Archives
- Today
- Total
코딩관계론
[프로그래머스] 메뉴리뉴얼(python) 본문
반응형
풀이
각 메뉴들을 조합하여 리스트에 저장하고, 각 course 개수의 best like를 구해주면 된다.
코드
from collections import Counter
from collections import defaultdict
import itertools
def solution(orders, course):
answer = []
cand_comb_menu = []
for num in course:
for order in orders:
comb_menues = list(itertools.combinations(order, num))
#AC, AD, AE
for comb_menu in comb_menues:
comb_menu = sorted(comb_menu)
cand_comb_menu.append("".join(comb_menu))
cand_comb_menu = Counter(cand_comb_menu).most_common()
best_like_dict = defaultdict(int)
for course_num in course:
best_like = 0
for menu, like in cand_comb_menu:
if len(menu) == course_num:
best_like = max(best_like, like)
best_like_dict[course_num] = best_like
for course_num in course:
if best_like_dict[course_num] == 0 or best_like_dict[course_num] < 2:
continue
for menu, like in cand_comb_menu:
if len(menu) == course_num and like == best_like_dict[course_num]:
answer.append(menu)
print(sorted(answer))
return sorted(answer)
더 짧은 버전
from collections import Counter
from collections import defaultdict
import itertools
def solution(orders, course):
answer = []
cand_comb_menu = []
for num in course:
comb_menues = []
for order in orders:
comb_menues += list(itertools.combinations(sorted(order), num))
cand_comb_menu = Counter(comb_menues)
answer += [''.join(k) for k, v in cand_comb_menu.items() if v == max(cand_comb_menu.values()) and v>1]
return sorted(answer)
소감
처음에는 모든 메뉴를 조합하여 완전탐색을 진행했다.
그렇게하면 n은 최대 24, r은 10이 되어 시간초과가 발생했다.
각 메뉴들마다 완전 탐색을 진행하면 n은 최대 10, r은 10이 되어 탐색의 개수가 훨씬 줄어들고, 메뉴 상에 없는 메뉴들은 조합되지 않아 검색의 시간을 줄일 수 있다.
반응형
'개발 > 알고리즘' 카테고리의 다른 글
[프로그래머스] 광고 삽입 (2) | 2022.11.06 |
---|---|
[프로그래머스] 순위 검색(python) (1) | 2022.10.31 |
[프로그래머스] 신규 아이디 추천(python) (1) | 2022.10.03 |
[프로그래머스] 파괴되지 않는 건물(python) (0) | 2022.10.03 |
[백준] 태상이의 훈련소 생활 (0) | 2022.10.02 |