반응형
해당 문제는 2021 KAKAO BLIND RECRUITMENT에서 출제된 문제다. 프로그래머스 기준 Level 2에 해당한다. 이번 문제는 combinations 함수와 Counter 함수를 사용하면 쉽게 해결이 가능하다.
from itertools import combinations
from collections import Counter
def solution(orders, course):
answer = []
for n in course:
candidates = []
for menu in orders:
for l in combinations(menu, n):
candidates.append(''.join(sorted(l)))
candidates = Counter(candidates).most_common()
if candidates != []:
target = candidates[0][1]
candidate = [most_common for most_common, count in candidates if count > 1 and count == target]
answer.extend(candidate)
return sorted(answer)
먼저 주문된 리스트를 n으로 받아온다. 그런 다음, n으로 조합할 수 있는 코스의 수 만큼 리턴할 수 있다. 이를 Candidates(후보) 메뉴 리스트에 넣어둔다. 그리고 Counter 함수를 사용하여 메뉴 후보 리스트 중 가장 많이 나온 리스트를 출력하면 된다.
처음 접근에는 가장 많이 나온 코스 메뉴만 사용하여 문제를 접근하였으나, 중복된 값이 있어서 틀리는 경우가 발생했다. 이를 해결하기 위해 target = candidates[0][1]을 사용하여, 가장 많이 나온 코스 메뉴와 숫자가 일치하는 코스 메뉴를 전부 리턴하는 형태로 처리해주었다.
추가로, candidates.append(''.join(sorted(l)))에서 sorted를 해주지 않으면, 입력된 값이 서로 다른 순서로 들어오게 되면 이를 다른 메뉴로 인식해버리기 때문이다.
'Python > Algorithm' 카테고리의 다른 글
[프로그래머스] 둘만의 암호 - Python (2) | 2023.09.08 |
---|---|
[프로그래머스] 대충 만든 자판 - Python (0) | 2023.09.08 |
[프로그래머스] 두 큐 합 같게 만들기 - Python (0) | 2023.09.05 |
[프로그래머스] 1차 다트 게임 - Python (0) | 2023.09.03 |
[프로그래머스] 비밀지도 - Python (0) | 2023.09.03 |