프로그래머스/LV2

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

chyam_eun 2025. 3. 10. 15:20

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

from itertools import combinations

def change(comb): # [('A','B'),('B','C')] 형식을 ["AB,"BC"]로 바꿔주기
    li=[]
    for i in comb:
        li.append(''.join(i))
    return li

def solution(orders, course):
    res=[] # 길이별로 최대 저장
    an=[] # 최종 결과
    for num in course: # 길이별로 나누기
        orderDic={} # 주문된 갯수 저장
        ma=2 # 최대 주문 수
        lis=[]
        for food in orders:
            food=list(food) # 정렬을 위해 list로 변환
            food.sort() 
            comb= list(combinations(food,num)) # num만큼의 길이로 조합 구하기
            li=change(comb) 
            for d in li: # 개수 세기
                if d not in orderDic: # 딕셔너리에 저장되지않았으면 1로 초기화
                    orderDic[d]=1
                else:
                    orderDic[d]+=1
        for d in orderDic:
            if ma<orderDic[d]: # 최대값보다 크면 
                ma=orderDic[d] # 갱신
                lis=[] # 초기화
                lis.append(d) # 추가
            elif ma==orderDic[d]: # 최대랑 같으면 추가
                lis.append(d)
        if len(lis)>0: # 주문된게 있으면 추가해주기
            res.append(lis)
    for i in res: # [["AC","CD"],["DE"]] 에서 각각 뽑아서 새로운 리스트에 저장
        for j in i:
            an.append(j)
    an.sort()
    return an