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
- 2021 KAKAO BLIND RECRUITMENT
- 구현
- 투포인터
- BFS
- 백트래킹
- 2018 KAKAO BLIND RECRUITMENT
- 2020 카카오 인턴십
- 투 포인터
- 우선순위큐
- 2019 KAKAO BLIND RECRUITMENT
- 다익스트라
- 프로그래머스
- 브루트포스
- SWEA
- 백준
- 비트마스킹
- 크루스칼
- 플로이드 와샬
- 플로이드와샬
- 조합
- Spring
- 이분탐색
- 2020 KAKAO BLIND RECRUITMENT
- 스택
- GIT
- 파이썬
- 트라이
- 시뮬레이션
- 로봇 청소기
- 최소 신장 트리
Archives
- Today
- Total
개발조아
[프로그래머스] 메뉴 리뉴얼 파이썬 본문
728x90
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/72411
주어진 메뉴를 주어진 주어진 길이만큼 조합해서 새로운 메뉴를 만들고,
같은 길이의 새로운 메뉴 중 가장 많이 나온 메뉴를 리스트에 담아 정렬해서 리턴하면 된다.
주의 할점은
["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