https://school.programmers.co.kr/learn/courses/30/lessons/72411
난이도 LV.2
문제 이해
1. 코스요리를 구성하는 단품메뉴 갯수가 담긴 course로 코스요리를 분류하기.
2. 최소 2명 이상의 손님으로부터 주문된 단품 메뉴 조합에 대해서만 코스요리 메뉴 후보에 포함.
3. 각 갯수에 따른 코스요리별 가장 많이 주문된 메뉴구성이 해당 코스 요리로 선정된다.
ㄴ 만약 가장 많이 주문된 메뉴구성이 여러개 ( 횟수 동일) 하다면 모두 코스요리 선정
접근법
1. 파이썬의 itertools를 이용해 조합(combinations)을 사용하여 주문된 단품메뉴로 만들 수 있는 모든 코스 요리 만들기.
2. 파이썬의 Counter을 사용해 중복된 데이터가 저장된 배열이 각 몇개씩 있는지 확인.
3. 2번 이상 주문 and 가장 많이 주문된 조합에 대해 저장한다.
코드
from itertools import combinations
from collections import Counter
def solution(orders, course):
answer =[]
for i in course:
temp = []
for order in orders:
temp += combinations(sorted(order),i)
counter = Counter(temp)
if len(counter) != 0 and max(counter.values()) != 1:
answer += [''.join(j) for j in counter if counter[j] ==max(counter.values())]
return sorted(answer)
조합이란?
- 서로 다른 n개 중에서 r개를 선택해 조를 만드는 것.
- 파이썬의 조합은 itertools의 combinations를 import해 사용할 수 있다.
combinations(배열, 선택하는 r개)
<-> 순열 이란?
- 몇개를 골라 순서를 고려해 나열하는 경우의 수 이다. (순서가 다르면 다른 것으로 본다.)
- 파이썬의 순열은 itertools의 permutation을 import해 사용할 수 있다.
permutations(배열, 선택 r개)
파이썬의 Counter
- 파이썬의 counter은 collections모듈의 포함되어 있다.
- 배열을 인자로 넘기면 각 원소가 몇 번씩 나오는지 저장된 객체를 얻게 된다.
- 문자열을 인자로 넘기면 문자열에서 각 문자가 몇 번씩 나타나는지 알 수 있다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 가장 먼 노드 by 파이썬(Python) : 그래프 bfs (0) | 2023.07.25 |
---|---|
[프로그래머스] 2022 KAKAO BLIND RECRUITMENT 파괴되지 않은 건물 by 파이썬 (Python) :누적합 (0) | 2023.07.23 |
[프로그래머스] 2020 KAKAO BLIND RECRUITMENT 문자열 압축 by 파이썬(Python) (0) | 2023.07.22 |
[프로그래머스] 연속된 부분 수열의 합 by 파이썬 (python) Lv2 (0) | 2023.07.20 |
[프로그래머스] 호텔 대실 LV2 by 파이썬 (python) (0) | 2023.07.19 |