👀 문제
https://programmers.co.kr/learn/courses/30/lessons/72411
👊 도전
1. 설계
- order의 조합을 구한다.
- hashmap에 조합 별 개수를 세서 저장한다.
- 조합 길이의 최댓값을 size에 저장한다.
- 조합 빈도수(hashmap)이 2 이상이고 최댓값(size)인 결과를 answer에 넣는다.
- answer을 오름차순 정렬하여 리턴한다.
2. 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
*
* @author HEESOO
*
*/
from itertools import combinations
def solution(orders, course):
answer = []
hashmap={}
size={}
for order in orders:
for i in course:
for comb in combinations(order, i):
menu="".join(sorted(comb))
if menu in hashmap:
hashmap[menu]+=1
else:
hashmap[menu]=1
if len(menu) in size:
size[len(menu)]=max(size[len(menu)], hashmap[menu])
else:
size[len(menu)]=hashmap[menu]
for i in hashmap:
if hashmap[i]>1 and hashmap[i]==size[len(i)]:
answer.append(i)
return sorted(answer)
3. 결과
🤟 성공 🤟
4. 설명
- 조합을 구한다
- combinations로 조합을 구한다.
- “XY”, “YX”는 같은 것으로 생각하기 때문에 sorted()로 오름차순 정렬한 후, join()으로 문자열을 합친다.
- hashmap에 menu가 있다면 하나 증가, 없다면 1을 넣어준다.
- size는 문자열 길이의 max를 저장한다. size에 len(menu) 값이 들어가있다면 최댓값으로 갱신, 없다면 현재 hashmap[menu]를 넣는다.
- 조합 중 조건에 맞는 값을 리턴한다
- 조합 횟수가 2 이상이고 길이가 최댓값인 것만 answer에 넣는다.
- 오름차순으로 정렬하여 리턴한다.