LEVEL :
Level2
문제 요약 :
2021년 카카오톡 코딩테스트 제출 문제이다.
주어진 문자열의 조합 세트 중 가장 많은 중복이 있는 조합을 고르는 문제였다.
해결 방안 :
combination을 통해 조합을 구하여 리스트로 바꾼뒤 정렬 후 이를 문자열로 바꾸어주고 그후에는 값이 얼마나 중복되는 지 구하면 된다.
Solution1 - 코드는 짧으나 비효율적인 구조 Count 함수 사용
import itertools
def solution(orders, course):
answer = {}
res = []
for idx in course :
answer[idx] = []
for order in orders :
for idx in course :
combinations = itertools.combinations(order,idx)
for combination in combinations :
c = "".join(sorted(list(combination)))
answer[idx].append(c)
for idx in course :
if not answer[idx] :
continue
max_cnt = 0
max_course = []
for menu in set(answer[idx]) :
count = answer[idx].count(menu)
if max_cnt < count and count >= 2:
max_course = [menu]
max_cnt=count
elif max_cnt == count and count >= 2 :
max_course.append(menu)
res += max_course
res = sorted(res)
return res
Solution2 - 정렬후 한번의 반복문으로 중복개수 확인 -> 더 효율적인 방법
import itertools
def solution(orders, course):
answer = {}
res = []
for idx in course :
answer[idx] = []
for order in orders :
for idx in course :
combinations = itertools.combinations(order,idx)
for combination in combinations :
c = "".join(sorted(list(combination)))
answer[idx].append(c)
for idx in course :
if not answer[idx] :
continue
max_cnt = 0
max_course = []
answer[idx] = sorted(answer[idx])
compare = [idx][0]
count = 0
for menu in answer[idx] :
if compare == menu :
count += 1
if max_cnt < count and count >= 2:
max_course = [menu]
max_cnt=count
elif max_cnt == count and count >= 2 :
max_course.append(menu)
else :
count = 1
compare = menu
res += max_course
res = sorted(res)
return res
프로그래머스 : https://programmers.co.kr/learn/courses/30/lessons/72411