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 |
Tags
- 백준
- GIT
- 투 포인터
- 브루트포스
- 비트마스킹
- 2020 카카오 인턴십
- Spring
- SWEA
- 2021 KAKAO BLIND RECRUITMENT
- 스택
- BFS
- 투포인터
- 2019 KAKAO BLIND RECRUITMENT
- 우선순위큐
- 크루스칼
- 플로이드 와샬
- 로봇 청소기
- 파이썬
- 시뮬레이션
- 트라이
- 이분탐색
- 구현
- 조합
- 플로이드와샬
- 2018 KAKAO BLIND RECRUITMENT
- 다익스트라
- 2020 KAKAO BLIND RECRUITMENT
- 백트래킹
- 최소 신장 트리
- 프로그래머스
Archives
- Today
- Total
개발조아
[프로그래머스] 메뉴 리뉴얼 파이썬 본문
728x90
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/72411
코딩테스트 연습 - 메뉴 리뉴얼
레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서
programmers.co.kr
주어진 메뉴를 주어진 주어진 길이만큼 조합해서 새로운 메뉴를 만들고,
같은 길이의 새로운 메뉴 중 가장 많이 나온 메뉴를 리스트에 담아 정렬해서 리턴하면 된다.
주의 할점은
["XYZ", "XWY", "WXA"]
3번 테스트케이스에서 2자리로 메뉴를 만든다고 했을 때
"XW"와 "WX"는 같은 메뉴로 친다.
이것 때문에 계속 답을 못찾고 있었다.
새로운 메뉴의 개수의 경우 메뉴명을 키로하는 딕셔너리로 만들어서 체크 했다.
메뉴의 길이는 최대 10이므로 딕셔너리로 구성된 배열로 만들었다.
조합으로 새로운 메뉴를 만들고 "WX"와 "XW"는 같은 메뉴임을 처리하기 위해 정렬해서 키로 만들었다.
from itertools import combinations
def solution(orders, course):
answer = []
menus = [{} for _ in range(11)]
for order in orders:
for cnt in course:
for comb in combinations(order,cnt):
new_menu = ''.join(sorted(comb))
if new_menu in menus[cnt]:
menus[cnt][new_menu] += 1
else:
menus[cnt][new_menu] = 1
for cnt in course:
tmp = []
max_cnt = 0
for menu,menu_cnt in menus[cnt].items():
if menu_cnt >= 2 and max_cnt < menu_cnt:
max_cnt = menu_cnt
tmp = [menu]
elif max_cnt == menu_cnt:
tmp.append(menu)
answer += tmp
answer.sort()
return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 위클리 챌린지 3주차 퍼즐 조각 채우기 파이썬 (0) | 2021.08.23 |
---|---|
[프로그래머스] 순위 검색 파이썬 (0) | 2021.08.13 |
[프로그래머스] 정수 삼각형 파이썬 (0) | 2021.08.13 |
[프로그래머스] 순위 파이썬 (0) | 2021.08.13 |
[프로그래머스] 네트워크 파이썬 (0) | 2021.08.13 |