메뉴 리뉴얼

최민수·2023년 8월 4일
0

알고리즘

목록 보기
86/94
from itertools import combinations as cb
from collections import defaultdict as dd

def solution(orders, course):
    answer = []
    
    for cnt in course:
        info = dd(int)
        result = []
        # 가능한 조합 누적
        for order in orders:
            res = cb(order, cnt)
            for item in res:
                item = ''.join(sorted(item))
                info[item] += 1
        # 개수별로 가장 큰 조합 찾기
        maxNum, maxKey = -987654321, ()
        for k,v in info.items():
            if maxNum < v:
                maxNum, maxKey = v, k
        # 최소 2번이 아니라면 후보로 추가X
        if maxNum < 2:
            continue
        # 후보 추가
        for k,v in info.items():
            if v == maxNum:
                result.append(''.join(k))
        answer.extend(result)
    
    return sorted(answer)

---
# 테스트 8 〉	통과 (4.87ms, 10.3MB)

2021 KAKAO BLIND RECRUITMENT

크게 복잡하지 않은 조합 문제였다.
결국 course 에 있는 수로 모든 조합을 만들어 구현하기 되면 풀리는 문제이기 때문에 특별히 어렵다고 느끼지는 못했다.

하지만 만약 파이썬으로 짜지 않고 Java로 짰다면?
itertools>combinations 와 같은 편리한 라이브러리가 존재하지 않는다면?

직접 조합을 구하는 함수를 짜서 한땀 한땀 작성해야 할 것이다.
만약 순열, 조합을 구하는 라이브러리에 의존도가 너무 심해졌고 원리가 가물가물하다면 바로 실패다.

오케 이제 자바로 직접 구현해보자.


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

profile
CS, 개발 공부기록 🌱

0개의 댓글