https://school.programmers.co.kr/learn/courses/30/lessons/72411
from itertools import combinations
def solution(orders, course):
answer = []
dic = {}
for i in range(len(orders)):
for j in range(len(course)):
if len(orders[i]) >= course[j]:
arr = list(orders[i])
for k in combinations(arr,course[j]):
a = tuple(sorted(k, key=lambda x: x))
if a in dic:
dic[a] += 1
else:
dic[a] = 1
# print(dic)
for i in range(len(course)):
l = [ key for key in dic if len(key) == course[i] and dic[key] >= 2]
if l:
maxi = [l[0]]
for j in range(1,len(l)):
if dic[maxi[-1]] < dic[l[j]]:
maxi = []
maxi.append(l[j])
elif dic[maxi[-1]] == dic[l[j]]:
maxi.append(l[j])
for c in maxi:
s = ''.join(k for k in c)
answer.append(s)
answer.sort()
return answer
솔직히
문제 이해만 5분,
풀이법 구상에만 5분
풀이에 1시간 반 정도.
총 1시간 40-50분 정도가 걸렸다.
개인적인 난이도는 구현하기가 어려운 탓에 중-상 정도로 생각한다.
코드는
우선 course에서 요구한 수 대로 조합해 dic 딕셔너리에 넣고 그 개수를 구한다.
다음으로 course에서 요구한 수만큼 최대값을 구한 후 answer에 append 시키면 된다.
말은 몇줄 안되지만 이를 구현하는데 많은 애를 먹었다.
쓸데없이 코드가 길고 중복된 반복문이 있기에 다 풀고 난 이후, 다른 사람들의 풀이를 참조했는데,
import collections
import itertools
def solution(orders, course):
result = []
for course_size in course:
order_combinations = []
for order in orders:
order_combinations += itertools.combinations(sorted(order), course_size)
most_ordered = collections.Counter(order_combinations).most_common()
result += [ k for k, v in most_ordered if v > 1 and v == most_ordered[0][1] ]
return [ ''.join(v) for v in sorted(result) ]
혹은,
from itertools import combinations
from collections import Counter
def solution(orders, course):
answer = []
for c in course:
temp = []
for order in orders:
combi = combinations(sorted(order), c)
temp += combi
counter = Counter(temp)
if len(counter) != 0 and max(counter.values()) != 1:
answer += [''.join(f) for f in counter if counter[f] == max(counter.values())]
return sorted(answer)
이 풀이법이 가장 많았다.
두 풀이법 모두 Counter 모듈로 나처럼 하나씩 개수를 구하지 않아도 되었다.
또한 most_common()이란 모듈로 인해 최대값을 나처럼 구하지 않아도 되었기에 많은 도움이 되었다.
'알고리즘' 카테고리의 다른 글
프로그래머스)두 큐 합 같게 만들기-pyhton (0) | 2023.02.02 |
---|---|
프로그래머스)수식 최대화-pyhton (0) | 2023.02.01 |
백준) 거스름돈-python (0) | 2023.01.30 |
백준) 잃어버린 괄호-python (0) | 2023.01.30 |
프로그래머스) 소수 찾기-python (0) | 2023.01.29 |