Algorithm

[카카오 코테 2023 | python] 이모티콘 할인행사

삐롱K 2025. 7. 1. 10:45
728x90
반응형

 

Q1) 문제를 어떻게 이해했나요?
A1) 모든 할인율 조합에 대해 시뮬레이션을 수행하고, 각 조합에 대해 이모티콘 플러스 가입자 수와 판매액을 계산한 후,
가입자 수 우선 → 판매액 기준으로 최적 결과를 찾는 완전탐색(Brute Force) 유형입니다.
Q2) 문제를 어떻게 풀 예정인가요?
A2) 이 문제는 가능한 할인율 조합이 매우 적기 때문에 완전탐색으로도 충분히 풀 수 있습니다.
이모티콘이 최대 7개, 각 이모티콘마다 선택할 수 있는 할인율이 4가지(10,20,30,40)이므로
총 경우의 수는 4⁷ = 16,384가지로, 계산량이 많지 않습니다.
1. 가능한 모든 할인율 조합 생성
2. 각 할인 조합에 대해 사용자별 행동 시뮬레이션
3. 조합별로 가입자 수와 판매액을 계산

 

💡 최적의 코드

from itertools import product

def solution(users, emoticons):
    discount_rates = [10, 20, 30, 40]
    best = [0, 0]  # [가입자 수, 매출액]

    # 모든 할인율 조합을 생성
    for discounts in product(discount_rates, repeat=len(emoticons)):
        plus_members = 0
        sales = 0

        # 각 유저에 대해 시뮬레이션
        for ratio, price_limit in users:
            total = 0
            for i in range(len(emoticons)):
                if discounts[i] >= ratio:  # 유저 기준 이상 할인된 이모티콘만 구매
                    discounted_price = emoticons[i] * (100 - discounts[i]) // 100
                    total += discounted_price

            # 기준 초과하면 이모티콘 플러스 가입
            if total >= price_limit:
                plus_members += 1
            else:
                sales += total

        # 우선순위: 가입자 수 > 판매액
        if plus_members > best[0]:
            best = [plus_members, sales]
        elif plus_members == best[0] and sales > best[1]:
            best = [plus_members, sales]

    return best
728x90
반응형