peacekim
할 수 있는 것과 할 수 없는 것.
peacekim
전체 방문자
오늘
어제
  • 분류 전체보기 (68)
    • 👨‍🏫ps (44)
      • ❄️프로그래머스 (20)
      • 🔟0️⃣백준 (21)
      • leetcode (3)
    • ✍🏻study (20)
      • 👐java (6)
      • 🍃spring (1)
      • 🥇algorithm (0)
      • 🚘oodp (4)
      • 📒 jpa (3)
      • 👣DB (2)
      • 🌂네트워크 (0)
      • 🎸기타 (3)
      • 👊 kotlin (1)
      • 🫥 jvm (0)
    • 📽project (4)
      • 🎀ReBoN (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
peacekim

할 수 있는 것과 할 수 없는 것.

[프로그래머스] 메뉴 리뉴얼 [python]
👨‍🏫ps/❄️프로그래머스

[프로그래머스] 메뉴 리뉴얼 [python]

2023. 3. 25. 17:46
반응형

문제

구현 문제이다.

처음에 모든 조합을 combination을 구현하여, 모든 조합을 구했다,,!!(itertools에 combination이 있다,,,)

dictionary를 사용하여, 각 조합의 갯수를 구했다.(이것도 collections의 Counter를 사용하면 되긴하다.)

이후에 dq를 사용하여, 동일한 길이의 조합 중에 가장 많은 갯수의 조합을 왼쪽에 놓았다.

dq의 앞에가 가장 큰 값이기 때문에 그 값과 비교하여, 같은 조합만 answer에 넣어주고 작은 값이 나오면 break해주었다.

answer의 값들을 sort해주어서 return 했다.

코드

from collections import deque
def solution(orders, course):
    answer = []
    combi = []
    for o in orders:
        for c in course:
            combi += combination("",sorted(o), c)
    # 각 조합의 갯수 저장
    dic = {}
    for co in combi:
        if co in dic:
            dic[co] += 1
        else:
            dic[co] = 1
    dqList = [deque([]) for i in range(course[-1] + 1)]
    # 동일한 길이의 가진 문자열 중 가장 많은 조합의 갯수를 queue 왼쪽에 저장.
    for k,v in dic.items():
        
        if len(dqList[len(k)]) == 0:
            dqList[len(k)].append([v,k])
        else:
            if dqList[len(k)][0][0] <= v:
                dqList[len(k)].appendleft([v,k])
    
    # 동일한 길이의 가진 문자열 중 가장 많은 조합의 갯수들을 찾아 answer에 저장
    for dq in dqList:
        if len(dq) == 0:
            continue
        maxNum = dq[0][0]
        # 가장 큰 값이 2보다 작으면 코스요리에 넣지 않는다.
        if maxNum < 2:
            continue
        answer.append(dq[0][1])
        dq.popleft()
        while len(dq) > 0:
            if maxNum == dq[0][0]:
                answer.append(dq[0][1])
                dq.popleft()
            else:
                break
    # 알파벳 순으로 sort
    answer.sort()
    return answer

def combination(tmp,o, c):
    ls = []
    if len(tmp) == c:
        return [tmp]
    for i in range(len(o)):
        tmp += o[i]
        ls += combination(tmp, o[i+1:], c)
        tmp = tmp[:-1]

    return ls
"""
코스 요리
주문할 때 가장 많이 함께 주문한 단품메뉴들을 코스요리 메뉴로 구성
코스요리 메뉴 = 최소 2가지 이상의 단품메뉴 and 최소 2명 이상의 손님한테 제공
새로 추가하게 될 코스요리의 메뉴 구성을 문자열 return
course에 나온 갯수대로 배열을 만들고, 조합들을 만들기.
조합
"""
반응형

'👨‍🏫ps > ❄️프로그래머스' 카테고리의 다른 글

[프로그래머스] 택배상자 [python]  (0) 2023.03.26
[프로그래머스] 괄호 변환 [python]  (0) 2023.03.25
[프로그래머스] 롤케이크 자르기 [python]  (0) 2023.03.24
[프로그래머스] 숫자 변환하기 [python]  (0) 2023.03.24
[프로그래머스] 큰 수 만들기 [python]  (0) 2023.03.19
    '👨‍🏫ps/❄️프로그래머스' 카테고리의 다른 글
    • [프로그래머스] 택배상자 [python]
    • [프로그래머스] 괄호 변환 [python]
    • [프로그래머스] 롤케이크 자르기 [python]
    • [프로그래머스] 숫자 변환하기 [python]
    peacekim
    peacekim
    할 수 있는 것과 할 수 없는 것. github: https://github.com/PyeongGangKim

    티스토리툴바