프로그래머스/미해결

프로그래머스 - 메뉴 리뉴얼

yanJuicy 2024. 2. 12. 16:24
반응형

문제

https://school.programmers.co.kr/learn/courses/30/lessons/72411

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이

orders에 있는 order마다 2개, 3개, 4개...씩 course 리스트에 있는 갯수만큼 조합을 만들고 course 갯수에 맞는 특정 조합의 갯수가 많은걸 찾아야 한다.

 

orders의 order 마다 course 갯수만큼 조합을 찾기 위해 combinations 함수를 사용한다.

 

특정 조합이 만들어지는 횟수를 구하기 위해 Counter 객체를 이용한다.

Counter를 통해 다음과 같이 특정 조합의 발생 횟수를 쉽게 구할 수 있다.

 

그러면 문제 조건에 맞게 combinations와 Counter를 이용한다.

combinations를 이용해 조합을 맞출 때는 order를 정렬해야 한다.

["XY", "YX"] 둘은 같은 메뉴지만 조합은 다르게 처리되고 그러면 Counter 객체에서도 따로 집계된다.

(x, y): 1

(y, x): 1

정렬을 하지 않으면 위처럼 집계가 되고 정렬을 하면

(x, y): 2

이렇게 집계가 된다.

 

메뉴는 최소 2명 이상에게 주문을 받아야 하므로 이에 대한 처리도 해야한다.

 

 

코드

python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from itertools import combinations
from collections import Counter
 
def solution(orders, course):
    answer = []
    for c in course:
        menu = []
        for order in orders:
           menu_combination = combinations(sorted(order), c)
           menu.extend(menu_combination)
 
        counter = Counter(menu)
        if counter and max(counter.values()) >= 2:
            for menu, order_count in counter.items():
                if order_count == max(counter.values()):
                    answer.append("".join(menu))
            
    return sorted(answer)
cs

 

반응형

'프로그래머스 > 미해결' 카테고리의 다른 글

프로그래머스 - [3차] 압축  (0) 2024.02.24
프로그래머스 - 의상  (0) 2024.02.22
프로그래머스 - 베스트앨범  (1) 2024.02.10
프로그래머스 - 표 편집  (0) 2024.01.23
프로그래머스 - 주식가격  (0) 2024.01.16