programmers- lv.2 (이모티콘 할인행사)

이예송·2023년 8월 30일

PS

목록 보기
86/97

문제링크: 이모티콘 할인행사

✍🏻 Information

content
언어python
난이도⭐️⭐️⭐️
풀이시간66분
제출횟수1
인터넷검색유무yes




🍒 My Code

import itertools

def solution(users, emoticons):
    answer = [0,0]
    discount = [10,20,30,40]
    dis_product = list(itertools.product(discount, repeat=len(emoticons))) #할인률 중복조합 list
    for i in dis_product:
        buy = []
        for per,cost in users:
            buy.append(sum([emoticons[j]*(100-i[j])*0.01 if i[j]>=per else 0 for j in range(len(i))]))           
        new_num,gain_cost = 0,sum(buy) #새로가입한사람수,이모티콘매출액
        for b in range(len(buy)):
            if buy[b]>=users[b][1]:
                new_num+=1
                gain_cost-=buy[b]
            if new_num>answer[0]:
                answer[0]=new_num
                answer[1]=gain_cost
            elif new_num==answer[0] and gain_cost>answer[1]:
                answer[0]=new_num
                answer[1]=gain_cost
    return answer




💡 What I learned

  • 중복순열: product(list_이름, repeat=n)
  • 중복조합: combinationswith_replacement(list이름, n)
  • 다른 사람 풀이: 나와 코드구조가 같은데 변수이름 등이 나보다 더 잘 정돈한 것 같다.
from itertools import product

def solution(users, emoticons):
    E = len(emoticons)
    result = [0, 0]
    percents = (10, 20, 30, 40)
    prod = product(percents, repeat=E)

    for p in prod:
        prod_members, prod_price = 0, 0
        for buy_percent, max_price in users: 
            user_price = 0
            for item_price, item_percent in zip(emoticons, p):
                if item_percent >= buy_percent:
                    user_price += item_price * (100-item_percent) * 0.01

            if user_price >= max_price:
                prod_members += 1
            else:
                prod_price += user_price

        result = max(result, [prod_members, prod_price])

    return result

0개의 댓글