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
- 2019 KAKAO BLIND RECRUITMENT
- 2021 KAKAO BLIND RECRUITMENT
- 플로이드와샬
- 2018 KAKAO BLIND RECRUITMENT
- 다익스트라
- 투 포인터
- 플로이드 와샬
- 시뮬레이션
- 크루스칼
- 스택
- 투포인터
- 우선순위큐
- GIT
- 트라이
- 프로그래머스
- 이분탐색
- 백준
- 파이썬
- SWEA
- 2020 카카오 인턴십
- 브루트포스
- 구현
- BFS
- 2020 KAKAO BLIND RECRUITMENT
- 백트래킹
- 최소 신장 트리
- 조합
- Spring
- 비트마스킹
- 로봇 청소기
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 |
Comments