Programmers#메뉴 리뉴얼

LSM ·2021년 9월 18일
0
post-custom-banner


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

profile
개발 및 취준 일지
post-custom-banner

0개의 댓글