- 가입자 수가 큰 것을 우선으로 그 다음에 판매익을 비교한다 >> 가입자 수가 같을 경우만 판매수익을 비교해서 업데이트 시킨다
- user의 제한이 100명, emoticon의 수가 7개로 한정되어있다 >> 할인율은 10,20,30,40으로 정해져 있으므로 emoticon을 할인하는 경우의 수는 최대 4^7으로 모든 case에 대해 판별해도 시간 초과가 나지 않을 거라 생각
- 중복조합(from itertools import product)을 이용해서 모든 case를 구했다 (코드의 discount_cases)
from itertools import product #중복순열 이용해서 discounts 정의
def discount_cases(t):
cases = []
for i in product([40,30,20,10], repeat=len(t)):
cases.append(i)
return cases
def solution(users, emoticons):
answer = [0,0]
for case in discount_cases(emoticons): #case는 [o,o,o,o]꼴
cnt = 0
rev = 0
#print('case>>',case)
for dis,lim in users: # 40%이상, 10000이하일 경우인 user1
total = 0
for i in enumerate(case):
if i[1]>=dis:
total += emoticons[i[0]]*(100-i[1])/100
#print('total>>>',total)
if total>=lim: # limit금액보다 크거나 같으면
cnt += 1 #이모티콘 플러스 구매
else: # limit보다 작으면
rev += total #이모티콘 구매
#print('cnt :',cnt, 'rev :',rev)
if cnt>answer[0]: #구매자 수 비교, 더 크면
answer[0] = cnt
answer[1] = rev
if cnt == answer[0] and rev>answer[1]:
answer[1] = rev
return answer
from itertools import permutations #순열
from itertools import product #중복순열
from itertools import combinations #조합
from itertools import combinations_with_replacement #중복조합
for i in product([1,2,3], repeat=2):
#[]에는 서로 다른 n개, repeat은 길이