https://school.programmers.co.kr/learn/courses/30/lessons/72411
orders에서 중복을 포함하지 않는 조합으로 course에 해당하는 수만큼의 문자열을 뽑아낸다.
파이썬에서 조합을 이용하면 원소를 튜플로 반환하기 때문에 이를 리스트로 변환 후 정렬해주고 문자열로 변환한다.
그리고 result 딕셔너리에 {"문자열" : 해당 문자열이 나온 개수}로 저장해줬다.
result를 돌면서 최댓값을 뽑아낸다.
먼저 2명 이상의 손님에게서 주문이 들어온 건만 포함해야 하며,
해당 값이 최댓값일 때는 tmp 리스트를 갱신해주고,
해당 값이 앞서 나온 최댓값과 동일한 값일 때는 tmp 리스트에 추가해줬다.
answer 리스트에 tmp의 원소들을 하나씩 추가해주고,
모든 추가가 끝나면 리스트를 정렬한 후 리턴해준다.
# 프로그래머스 72411: 메뉴 리뉴얼 (2021 KAKAO BLIND RECRUITMENT)
from itertools import combinations
def solution(orders, course):
answer = []
for i in course:
result = {}
for j in orders:
# orders에서 course별로 해당 수 뽑아냄
c = list(combinations(j, i))
for k in c:
# 알파벳 오름차순으로 정렬 후 문자열로 변환
k = sorted(list(k))
s = ''.join(k)
# 딕셔너리에 추가 {문자열: 카운트}
if s in result:
result[s] += 1
else:
result[s] = 1
max_cnt = 0
tmp = []
for key in result:
if result[key] < 2: # 2명 이하의 손님에게서 주문된 구성은 후보에 들어가지 않음
continue
if result[key] > max_cnt: # 최댓값 갱신
max_cnt = result[key]
tmp = [key]
elif result[key] == max_cnt: # 동일한 최댓값 추가
tmp.append(key)
for i in tmp: # 정답 배열에 추가
answer.append(i)
answer.sort() # 알파벳 오름차순으로 정렬
return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 | Lv2] 수식 최대화 (Python) - 2020 카카오 인턴십 (0) | 2023.03.06 |
---|---|
[프로그래머스 | Lv2] 순위 검색 (Python) - 2021 KAKAO BLIND RECRUITMENT (0) | 2023.03.05 |
[프로그래머스 | Lv2] 거리두기 확인하기 (Python) - 2021 카카오 채용연계형 인턴십 (0) | 2023.03.03 |
[프로그래머스 | Lv2] 양궁대회 (Python) - 2022 KAKAO BLIND RECRUITMENT (0) | 2023.03.02 |
[프로그래머스 | Lv2] k진수에서 소수 개수 구하기 (Python) - 2022 KAKAO BLIND RECRUITMENT (0) | 2023.03.01 |