[프로그래머스][Python] Lv2. 메뉴 리뉴얼

2022. 5. 13. 09:51·레거시모음/알고리즘 문제풀이

 

2021 KAKAO BLIND RECRUITMENT

문제풀러 바로가기👇👇👇👇👇👇

https://programmers.co.kr/learn/courses/30/lessons/72411

 

코딩테스트 연습 - 메뉴 리뉴얼

레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서

programmers.co.kr

 


문제 설명

 

위 문제는 단순 구현 문제로 조합(itertools.combinations)을 사용해 모든 메뉴의 경우 구한다. 그리고 collections.Counter 라이브러리를 이용해 가장 주문이 많았던 조합을 구해 코스요리에 추가하면 된다. 논리는 간단하다.

 

이 문제의 주의사항은 값이 주어질 때, 무조건 알파벳 순서대로 주지 않기 때문에 각 코스에 정렬을 진행한 다음에 메뉴의 개수를 세는 작업을 착수해야 정답을 얻을 수 있다.

 

 


코드

 

  • 내 풀이
def solution(orders, course):
    from itertools import combinations
    from collections import Counter
    
    course_dict = []
    for c in course:
        menu = []
        for o in orders:
            for i in list(combinations(o, c)):
                menu.append("".join(sorted(list(i))))
        course_dict.append(Counter(menu))

    answer = []
    for dict in course_dict:
        tmp = 2
        for key, value in dict.most_common():
            if value >= tmp:
                tmp = value
                answer.append(key)
            else:
                break

    answer.sort()
    return answer

 

 

  • 다른 사람 풀이
import collections
import itertools

def solution(orders, course):
    result = []

    for course_size in course:
        order_combinations = []
        for order in orders:
            order_combinations += itertools.combinations(sorted(order), course_size)

        most_ordered = collections.Counter(order_combinations).most_common()
        result += [ k for k, v in most_ordered if v > 1 and v == most_ordered[0][1] ]

    return [ ''.join(v) for v in sorted(result) ]

 

 

다른 사람의 풀이와 비교해봤을 때, 전체적인 논리는 비슷하지만 내 풀이에 비해

  1.  간결하다.
  2. 마지막에 문자열화를 진행한다.
  3. 처음 combinations 함수에 넣을 때 정렬이 진행시킨다.

는 점에서 달랐다. 

'레거시모음/알고리즘 문제풀이' 카테고리의 다른 글
  • [프로그래머스][Python] Lv2. 게임 맵 최단거리
  • [파이썬][백준] 2156번 포도주 시식
  • [백준][파이썬] 10816번 숫자 카드 2
  • [백준][파이썬] 18870번 좌표압축
gakko
gakko
좌충우돌 개발기
  • gakko
    MYVELOP 마이벨롭
    gakko
  • 전체
    오늘
    어제
    • 분류 전체보기 (207) N
      • 끄적끄적 (6)
      • Spring (18) N
      • Java (2)
      • Redis (1)
      • Test (3)
      • 대외활동 (36)
        • 부스트캠프 (23)
        • IT커뮤니티 (5)
        • 글또 (5)
        • 컨퍼런스 (3)
      • Infra (5)
        • Docker (1)
        • Jenkins (1)
        • AWS (1)
      • CS (26)
        • 자료구조 (13)
        • 운영체제 OS (12)
        • 데이터베이스 (1)
      • MySQL (7)
      • Git & GitHub (16)
        • Git (12)
        • Github Actions (1)
        • 기타(마크다운 등) (3)
      • 프로젝트 (2)
      • 리눅스 (6)
        • 기초 (6)
        • 리눅스 서버 구축하기 (0)
      • 후기 (3)
        • Udemy 리뷰 (3)
      • Python (12)
      • 레거시모음 (64)
        • 스프링 (11)
        • 자바 클래스&메소드 (1)
        • 오류해결 (18)
        • JSP & Servlet (12)
        • 자바스크립트 기초 (3)
        • React (2)
        • 이클립스 (1)
        • 알고리즘 문제풀이 (16)
      • 디자인패턴 (0)
  • 블로그 메뉴

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

    • 우진님
  • 공지사항

  • 인기 글

  • 태그

    java
    Python
    오류해결
    GitHub
    운영체제
    웹개발
    MySQL
    jsp
    자바
    os
    스프링
    스프링부트
    자바스크립트
    파이썬
    Spring
    Git
    알고리즘
    부스트캠프 7기
    부스트캠프 멤버십
    부스트캠프
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
gakko
[프로그래머스][Python] Lv2. 메뉴 리뉴얼
상단으로

티스토리툴바