[PS] 이모티콘 할인행사

owo·2023년 2월 10일
0

PS

목록 보기
18/25

문제 링크

코드

def solution(users, emoticons):
    rates_list = all_rates(len(emoticons))
    
    max_plus = max_price = 0
    for rates in rates_list:
        plus = price = 0
        for user in users:
            p = calculate(user[0], rates, emoticons)
            if p >= user[1]:
                plus += 1
            else:
                price += p
        
        if plus > max_plus or (plus == max_plus and price > max_price):
            max_plus = plus
            max_price = price
    
    return [max_plus, max_price]
    
    
def all_rates(l):
    cases = []
    rates = [10, 20, 30, 40]
    
    
    def all_cases(picked, left):
        if not left:
            cases.append(picked)
            return
        
        for r in rates:
            all_cases(picked + [r], left - 1)
            
        
    all_cases([], l)
    return cases


def calculate(standard, rates, prices):
    total_price = 0
    for i, r in enumerate(rates):
        if r >= standard:
            total_price += prices[i] * (100 - r) / 100
            
    return total_price

리뷰

  • case를 모두 구하는 방법은 itertools.product를 이용하면 쉽게 할 수 있다
  • 처음에 할인률이 10%, 20%, 30%, 40%만 가능하다는 지문을 못읽고 헤맸다

0개의 댓글