알고리즘/프로그래머스

프로그래머스[2021 KAKAO BLIND RECRUITMENT] 메뉴 리뉴얼 by 파이썬 (python)

코딩하는이씨 2023. 7. 18. 15:59
728x90
반응형

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모듈의 포함되어 있다.

- 배열을 인자로 넘기면 각 원소가 몇 번씩 나오는지 저장된 객체를 얻게 된다.

- 문자열을 인자로 넘기면 문자열에서 각 문자가 몇 번씩 나타나는지 알 수 있다.

728x90
반응형