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)
크게 복잡하지 않은 조합
문제였다.
결국 course
에 있는 수로 모든 조합을 만들어 구현
하기 되면 풀리는 문제이기 때문에 특별히 어렵다고 느끼지는 못했다.
하지만 만약 파이썬으로 짜지 않고 Java로 짰다면?
itertools>combinations
와 같은 편리한 라이브러리가 존재하지 않는다면?
직접 조합을 구하는 함수를 짜서 한땀 한땀 작성해야 할 것이다.
만약 순열, 조합을 구하는 라이브러리에 의존도가 너무 심해졌고 원리가 가물가물하다면 바로 실패다.
오케 이제 자바로 직접 구현해보자.
출처: https://school.programmers.co.kr/learn/courses/30/lessons/72411