Skip to content

Latest commit

 

History

History
35 lines (30 loc) · 2.45 KB

풀이_메뉴리뉴얼.md

File metadata and controls

35 lines (30 loc) · 2.45 KB

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

  • Date : 2021.10.10(일)
  • Time : 30분

문제

  • 각 손님들이 주문한 단품메뉴들이 문자열 형식으로 담긴 배열 orders, 스카피가 추가하고 싶어하는 코스요리를 구성하는 단품메뉴들의 갯수가 담긴 배열 course가 매개변수로 주어질 때, 스카피가 새로 추가하게 될 코스요리의 메뉴 구성을 문자열 형태로 배열에 담아 return 하도록 solution 함수를 완성해 주세요.

  • 제한사항

    • orders 배열의 크기는 2 이상 20 이하입니다.
    • orders 배열의 각 원소는 크기가 2 이상 10 이하인 문자열입니다.
      • 각 문자열은 알파벳 대문자로만 이루어져 있습니다.
      • 각 문자열에는 같은 알파벳이 중복해서 들어있지 않습니다.
    • course 배열의 크기는 1 이상 10 이하입니다.
      • course 배열의 각 원소는 2 이상 10 이하인 자연수가 오름차순으로 정렬되어 있습니다.
      • course 배열에는 같은 값이 중복해서 들어있지 않습니다.
    • 정답은 각 코스요리 메뉴의 구성을 문자열 형식으로 배열에 담아 사전 순으로 오름차순 정렬해서 return 해주세요.
      • 배열의 각 원소에 저장된 문자열 또한 알파벳 오름차순으로 정렬되어야 합니다.
      • 만약 가장 많이 함께 주문된 메뉴 구성이 여러 개라면, 모두 배열에 담아 return 하면 됩니다.
      • orders와 course 매개변수는 return 하는 배열의 길이가 1 이상이 되도록 주어집니다.

코드 풀이

    for i in course:
        number = []
        for j in orders:
            number += list(map(''.join, combinations(sorted(j), i)))
        for a,b in Counter(number).most_common():
            if b == max(Counter(number).values()) and max(Counter(number).values()) > 1:
                answer.append(a)

: 먼저 course를 기준으로 특정 갯수만큼의 조합을 만들어준다. 그리고 그 안에서 각 손님들이 주문한 orders를 하나씩 돌리는데 combinations를 이용해서 모든 조합을 number에 저장해둔다. 그리고 그 조합에서 Counter를 이용해 가장 많이 사용된 조합을 저장해둔다. 그리고 코스요리에는 최소 2명 이상의 손님에게서 주문된 구성만 코스요리 후보에 들어가므로 values가 1 초과인지를 검사해야한다.