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

Computer Science/Problem Solving

문제 설명

제한사항 및 입출력

풀이

역시 카카오답게 문제가 쉽지않다. 정리해보자면 손님이 단품으로 주문한 메뉴들과 만들어야하는 코스요리에 포함되어야하는 단품 요리 수가 주어지고, 만들어야하는 코스 요리의 제약조건은 다음과 같다.

1. 2개 이상의 메뉴로 이루어져야함.

2. 2명 이상의 손님이 주문한 메뉴여야함

3. 각 코스요리 별로 가장 많이 주문된 메뉴 구성을 사전순으로 출력 (만약 같다면 모두 출력)

 

이를 위해 역시 가장 먼저 생각난 방법은 조합이다. orders와 course의 배열 크기가 작아 모든 조합을 찾을 수 있다는 생각이 들었다. 각 주문들을 순회하며 주어진 코스요리의 개수만큼 모든 조합을 만들고, 해시맵으로 관리하면서 이미 존재한다면 나온 수를 올려주고 없다면 추가해주는 방식으로 풀이하였다.

내 코드

from collections import Counter
from itertools import combinations
  
def solution(orders, course):
    # 길이 i 코스요리의 종류와 빈도
    counts = {i: Counter() for i in course}

    # 개수 세기 (길이에 따른 모든 조합)
    for i in orders:        
        for j in course:
            if len(i) >= j:
                for comb in combinations(i, j):
                    counts[j][''.join(sorted(comb))] += 1   # WX, XW 처럼 같은 키가 분리되는 경우

    ans = []
    for i in course:
        if not counts[i]: continue
        
        # 길이 i의 코스요리의 종류에서 2명 이상이 시킨 조합들 중 빈도가 최댓값 조합만 ans에 추가
        max_cnt = max(counts[i].values())
        if max_cnt >= 2:
            ans += [k for k, v in counts[i].items() if v == max_cnt]
        
    return sorted(ans)

처음엔 counts 해시맵에 키를 정렬하지 않고 넣어주었더니 WX, XW와 같은 경우를 잡지 못해 올바른 해를 도출해주지 못했다. 추가적으로 키를 넣을 때 정렬해주어 해결해주었다. 지금 생각해보니 그냥 order를 순회할 때 i를 정렬해주어도 되었는데 왜 이렇게 했을까... 

이렇게 만들어준 메뉴 길이 별 코스요리의 모든 조합들을 순회하며 가장 빈도가 많은 조합만 ans에 추가해주어 풀이했다.

'Computer Science > Problem Solving' 카테고리의 다른 글

프로그래머스 - 거리두기 확인하기  (0) 2025.11.18
프로그래머스 - 조이스틱  (0) 2025.11.17
프로그래머스 - 서버 증설 횟수  (0) 2025.11.15
프로그래머스 - 등굣길  (0) 2025.11.05
프로그래머스 - k진수에서 소수 개수 구하기  (0) 2025.11.05
'Computer Science/Problem Solving' 카테고리의 다른 글
  • 프로그래머스 - 거리두기 확인하기
  • 프로그래머스 - 조이스틱
  • 프로그래머스 - 서버 증설 횟수
  • 프로그래머스 - 등굣길
hojoo
hojoo
그냥 개발이 즐거운 사람
  • hojoo
    dev_record
    hojoo
  • 전체
    오늘
    어제
    • 분류 전체보기 (84)
      • Study (0)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 (0)
        • Real MySQL 8.0 (0)
        • 친절한 SQL 튜닝 (0)
        • 도메인 주도 개발 시작하기 (0)
        • 대규모 시스템 설계 기초 (0)
      • Computer Science (68)
        • Problem Solving (30)
        • Data Structure (4)
        • Spring Boot (14)
        • DB (1)
        • Java (4)
        • OS (3)
        • Server (3)
        • Tech (0)
      • Security (16)
        • Reversing (15)
        • Assembly (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Spring boot
    Lena tutorial
    DB
    x64dbg
    서버 증설 횟수
    레나 튜토리얼
    servlet
    13265
    15973
    12033
    DP
    Header
    자료구조
    2539
    n+1
    bean
    PE header
    백준
    리버싱 핵심원리
    n^2 배열 자르기
    dreamhack.io
    16946
    Reversing
    9421
    HTTP
    리버싱
    프로그래머스
    19622
    소수상근수
    21278
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
hojoo
프로그래머스 - 메뉴 리뉴얼
상단으로

티스토리툴바