문제 링크
코드
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%만 가능하다는 지문을 못읽고 헤맸다