Python으로 구현한 72411번 메뉴 리뉴얼 문제 풀이입니다.
https://programmers.co.kr/learn/courses/30/lessons/72411
from itertools import combinations
from collections import Counter
def solution(orders, course) :
answer = []
data = []
for order in orders :
# 문자열 정렬
order = sorted(order)
# 조합
for c in course :
data += combinations(order, c)
# 빈도수로 정렬
value = Counter(data).most_common()
map_info = {}
for k, v in value :
if len(k) not in map_info.keys() or map_info[len(k)] == v :
if v <= 1 :
break
answer.append(''.join(k))
map_info[len(k)] = v
answer = sorted(answer)
return answer
1. 전달받은 orders 리스트의 문자열을 하나씩 꺼내 오름차순으로 정렬을 수행한다.
2. course의 요소를 하나씩 확인하여 해당 개수(c)만큼 정렬된 order을 조합하여 data 리스트에 추가한다.
3. 이후 Counter() 를 통해 빈도수로 정렬하여 value에 저장하고 map_info 딕셔너리에 (문자 개수 : 빈도 수) 형태로 할당한다.
하나의 작업을 수행할 때 map_info에 해당 문자 개수가 존재하지 않거나, 값이 존재한다면 map_info의 값과 v의 값이 동일할 경우에만 작업을 수행한다.
또한, 문제에서 '최소 2명 이상'의 조건이 있으므로 v가 1 이하라면 break한다.
4. answer 리스트를 오름차순으로 정렬하여 반환한다.
'프로그래머스(Python) 풀이 > Level.2' 카테고리의 다른 글
프로그래머스(Python) 12978번 배달 풀이 (0) | 2022.05.13 |
---|---|
프로그래머스(Python) 86052번 빛의 경로 사이클 풀이 (0) | 2022.05.12 |
프로그래머스(Python) 77885번 2개 이하로 다른 비트 풀이 (0) | 2022.05.11 |
프로그래머스(Python) 86971번 전력망을 둘로 나누기 풀이 (0) | 2022.05.11 |
프로그래머스(Python) 84512번 모음 사전 풀이 (0) | 2022.05.11 |