문제
https://programmers.co.kr/learn/courses/30/lessons/72411
처음 작성한 코드
def solution(orders, course):
from itertools import combinations
answer = []
for i in course:
dic = {}
for j in orders:
for s in combinations(sorted(j),i):
if ''.join(s) in dic.keys(): dic[''.join(s)] +=1
else: dic[''.join(s)] = 1
if not dic: continue
maxNum = max(dic.items(), key = lambda x:x[1])[1]
for x in dic.items():
if x[1]==maxNum and maxNum>=2:
answer.append(x[0])
return sorted(answer)
- orders를 돌면서 course 갯수만큼 combinations을 구한다.
- dictionary 형 변수인 dic에 모든 조합을 넣을건데 이미 구한 조합에 있으면 count를 올리고 없으면 새로 추가할 것이다.
- max의 key를 몇 번 사용됐는지 위에서 구한 값을 기준으로 하여 제일 많이 주문된 수를 maxNum에 저장한다.
- dic을 돌면서 제일 많이 주문된 수와 같고 2번 이상 주문된 조합(메뉴조합)만 answer에 넣는다.
코드 리뷰 후
def solution(orders, course):
from itertools import combinations
from collections import Counter
answer = []
for i in course:
dic = []
for j in orders:
for s in combinations(sorted(j),i):
dic.append(''.join(s))
dic = Counter(dic).most_common()
maxNum = dic[0][1]
for x in dic:
if x[1]==maxNum and maxNum>=2:
answer.append(x[0])
return sorted(answer)
깨달은 점
- list를 Counter 하면 어떤 원소가 몇개있는지 dictionary 형태로 반환해준다. 만약 리스트가 ['a', 'a', 'c'] 라면 {'a':2, 'c':1} 이렇게 반환을 해주는데, Counter의 most_common()함수를 실행하면 제일 많이 사용한 순으로 정렬을 해준다.
- 재밌다 포헹
'Programmers' 카테고리의 다른 글
[프로그래머스] 순위 검색 (0) | 2021.01.27 |
---|---|
[프로그래머스] 신규 아이디 추천 (0) | 2021.01.27 |
[프로그래머스] 수식 최대화 (0) | 2021.01.25 |
[프로그래머스] 스킬트리 (0) | 2021.01.23 |
[프로그래머스] 압축 (0) | 2021.01.22 |