https://school.programmers.co.kr/learn/courses/30/lessons/150368
from itertools import product
def solution(users, emoticons):
answer = [0,0]
sales = [10, 20, 30, 40] # 이모티콘의 할인율
for case in product(sales, repeat=len(emoticons)):
plus = 0
money = 0
for user in users:
total = 0
for idx, sale in enumerate(case):
if case[idx] >= user[0]:
total += emoticons[idx] * (100 - sale) // 100
if user[1] <= total:
plus += 1
else:
money += total
if answer[0] < plus:
answer[0] = plus
answer[1] = money
elif answer[0] == plus:
if answer[1] < money:
answer[1] = money
return answer
우선 알아야 할 점은 세일은 10,20,30,40 중 하나로 결정되고
그 4개의 경우의 수가 각기 다른 이모티콘에 적용된다는 점이다. 예를들어 임티1에 10퍼센트, 임티2에 40퍼센트 이런 식이다.
그런 경우의 수를 모두 product로 만들었다.
그 다음은 users 리스트를 돌며 user의 할인율이 더 작으면 할인율을 계산하는 등의 작업을 그대로 코드로 옮겼다.
이 문제는 내가 실패한 문제인데, 우선 문제를 대충 읽어 세일이 10,20 등으로 정해져 있다는 점을 인지하지 못했다.
또한 임티마다 다른 또는 같은 할인율이 적용된다는 점을 인지하지 못했다.
때문에 나는 1퍼센트부터 100퍼센트까지의 할인율을 가진다 생각했고 이분탐색으로 진행했었다.