🔗 Link
https://school.programmers.co.kr/learn/courses/30/lessons/150368
🧩 Source Code
from itertools import product
def solution(users, emoticons):
max_subscribers, max_revenue = 0, 0
n = len(emoticons)
discount_rate = [10,20,30,40]
for discounts in product(discount_rate, repeat = n):
subscribers, revenue = 0,0
for min_discount, max_price in users:
total_cost = 0
for emoticon_price, discount_rate in zip(emoticons, discounts):
if discount_rate >= min_discount:
total_cost += emoticon_price / 100 * (100 - discount_rate )
if total_cost >= max_price :
subscribers += 1
else : revenue += total_cost
if subscribers > max_subscribers or (subscribers == max_subscribers and max_revenue < revenue) :
max_subscribers , max_revenue = subscribers , revenue
return [max_subscribers , max_revenue]
📝 Commentary
할인 정보를 [10,20,30,40]으로 가지고 있고 이를 itertools의 product를 사용해서 구해주었다
from itertools import product
iterable1 = [1, 2]
iterable2 = ['A', 'B']
result = product(iterable1, iterable2)
print(list(result))
# [(1, 'A'), (1, 'B'), (2, 'A'), (2, 'B')]
사용방법은 위와 같이 하거나 repeat 인자를 넣어서 조정할 수 있다.
n = len(emoticons)
discount_rate = [10,20,30,40]
for discounts in product(discount_rate, repeat = n):
이렇게 해주면 할인 정보의 총 조합을 구할 수 있다.
그런 다음 이모티콘에 할인율을 적용한 가격을 구해주는데
for min_discount, max_price in users:
total_cost = 0
for emoticon_price, discount_rate in zip(emoticons, discounts):
if discount_rate >= min_discount:
total_cost += emoticon_price / 100 * (100 - discount_rate )
이때 사용자가 설정한 가격보다 커야 구매를 한다.
가격보다 크면 구독자를 얻게 되고 아니면 그냥 이득이 올라간다.
if total_cost >= max_price :
subscribers += 1
else : revenue += total_cost
마지막으로 구독자가 더 많은 경우의 수이거나 혹은 최대 이익이 갱신되는 경우는 바꿔준다.
if subscribers > max_subscribers or (subscribers == max_subscribers and max_revenue < revenue) :
max_subscribers , max_revenue = subscribers , revenue
'Coding test' 카테고리의 다른 글
[ 프로그래머스 / 파이썬 ] 무지의 먹방 라이브 (0) | 2025.01.06 |
---|---|
[ 프로그래머스 / 파이썬 ] 기둥과 보 설치 (0) | 2025.01.03 |
[프로그래머스 / 파이썬 ] 풍선 터트리기 (0) | 2024.12.30 |
[ 프로그래머스/ 파이썬 ] [1차] 셔틀버스 (1) | 2024.12.29 |
[백준/1422/파이썬] 숫자의 신 (1) | 2024.12.27 |