728x90
반응형
문제출처: https://school.programmers.co.kr/learn/courses/30/lessons/150368
풀이:
from itertools import product
def solution(users, emoticons):
res = [0, 0]
for discounts in product((40,30,20,10), repeat = len(emoticons)):
# print(discounts)
result = [0, 0] # 이모티콘 판매액
for user_discount, user_money in users:
# print(user_discount,user_money)
sub_pass = 0
# print(discounts)
for emoticon, discount in zip(emoticons,discounts):
if discount >= user_discount:
sub_pass += emoticon * (1-discount/100)
if sub_pass >= user_money:
result[0] += 1
else:
result[1] += sub_pass
res = max(res, result)
return res
res - 결과를 담을 값
for discounts in product((40,30,20,10), repeat = len(emoticons)):
중복순열로 할인율 모든 경우의 수를 담는다 ex (40,40),(40,30) ,,,(10,10) 이런식으로
repeat 는 반복 개수를 말한다 2개만큼 담는다는 뜻
for user_discount, user_money in users:
sub_pass = 0
패스가입자 0 으로 선언
for emoticon, discount in zip(emoticons,discounts):
if discount >= user_discount:
sub_pass += emoticon * (1-discount/100)
if sub_pass >= user_money:
result[0] += 1
else:
result[1] += sub_pass
중요 부분
유저의 자기만의 할인율 이상을 할인해야 구매한다.
할인율을 계산한 가격을 sub_pass에 더한다
sub_pass 가 유저의 자기만의 일정금액보다 크다면 패스를 사고
그렇지 않으면 sub_pass 금액을 더해준다.
res = max(res, result)
가장 큰 값만 남겨두면서 비교
반응형
댓글