프로그래머스|메뉴 리뉴얼

README·2022년 8월 16일
0

파이썬 PS풀이

목록 보기
98/136

문제 설명

입력된 문자열들의 원소들을 길이별로 조합해서 길이별로 가장 자주 등장한 조합을 구하는 문제입니다.

작동 순서

  1. 문자열을 순서대로 정렬한 후 원하는 길이로 조합합니다.
  2. 조합된 문자열이 이미 등장한 경우 횟수를 +1해주고 처음 등장하는 경우 횟수를 1로 지정해줍니다.
  3. 조합된 문자열들중 등장횟수가 2이상인 문자열들을 찾습니다.
  4. 만약 같은 길이에서 더 등장 횟수가 많은 문자열이 나오면 그 문자열을 저장하고 기존의 문자열을 삭제합니다.
  5. 같은 길이에서 같은 등장횟수의 문자열이 나오면 그 문자열도 저장합니다.
  6. 문자열들을 하나의 배열에 합치고 정렬한뒤 출력합니다.

소스코드

from itertools import combinations


def solution(orders, course):
    answer = []
    menu = {}

    menuComb = [[0] for _ in range(11)]
    maxCount = [0 for _ in range(11)]

    for i in orders:
        i = sorted(i)
        for j in course:
            for k in combinations(i, j):
                if "".join(k) in menu:
                    menu["".join(k)] += 1
                else:
                    menu["".join(k)] = 1

    for i in menu:
        if menu[i] > 1 and maxCount[len(i)] < menu[i]:
            maxCount[len(i)] = menu[i]
            menuComb[len(i)] = [i]
        elif 1 < menu[i] == maxCount[len(i)]:
            menuComb[len(i)].append(i)

    for i in course:
        if menuComb[i][0] != 0:
            for j in menuComb[i]:
                answer.append(j)
    answer.sort()
    return answer
profile
INTP 개발자 지망생

0개의 댓글