chyam

[프로그래머스 Lv2,python] - 이모티콘 할인행사 본문

프로그래머스/LV2

[프로그래머스 Lv2,python] - 이모티콘 할인행사

chyam_eun 2025. 4. 4. 14:28

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

 

프로그래머스

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

programmers.co.kr

from itertools import product

def buy_able(rates,users,emoticons):
    user_buy = []
        # 자신의 기준에 따라 이모티콘 구매 비용의 합이 일정 가격 이상이 된다면, 이모티콘 '구매를 모두 취소'하고 이모티콘 플러스 서비스에 가입
    for emo_tmp in rates:
        tmp = [0] * len(users)
        for i in range(len(emo_tmp)): # 이모티콘의 각 할인율 
            for j in range(len(users)): # 각 사람들
                user_rate = users[j][0]
                if user_rate <= emo_tmp[i]: # 할인율보다 작아야 살수있음
                    tmp[j] += int(round(emoticons[i] * ((100 - emo_tmp[i])/100),2))
        user_buy.append(tmp)
    return user_buy 

def solution(users, emoticons):
    res = []
    # 이모티콘마다 할인율은 다를 수 있으며, 할인율은 10%, 20%, 30%, 40% 중 하나
    rates = list(product([10, 20, 30, 40], repeat = len(emoticons)))
    best_sub = 0
    best_sale = 0
    user_buy = buy_able(rates,users,emoticons) # 구매 가능한 가격들 
    for idx, price_list in enumerate(user_buy):
        tmp_sub = 0
        tmp_money = 0
        for i in range(len(users)):
            if price_list[i] >= users[i][1]:  # 유저의 기준 금액 넘으면 가입
                tmp_sub += 1
            else:
                tmp_money += price_list[i]

        # 조건: 가입자 수 최우선, 같으면 매출액 비교
        if tmp_sub > best_sub or (tmp_sub == best_sub and tmp_money > best_sale):
            best_sub = tmp_sub
            best_sale = tmp_money

    return [best_sub, best_sale]