알고리즘
[프로그래머스]-이모티콘할인행사(swift)
2료일
2023. 5. 4. 12:58
우리가 생각해야하는것은 1. 가입자를 늘리자. 2. 그중 판매액은 최대로
우선 이모티콘의 최대개수는 7개이고 할인율은 4개이다. 그래서 4의7승의 경우의수가 나오고 인원은 최대 100명이므로 곱해보면 1,600,000대략번의 횟수가 나오기에 완전탐색 가능하다고 생각을 하였다.
그렇다면 중복순열을 일일이 구현해야할까? 라고 의문점이 들었다 왜냐면 파이썬은 앵간한건 구현이 되어있기 때문이다. 찾아보니 product라고 중복순열을 만들어주는 모듈이 있엇다. 그래서 바로 냠냠!
할인율로 조합될수 있는 모든 경우의 수를 구해주고 첫번째의 경우의수부터 끝의 경우의수까지 루프를 돌면서 유저가 가지고 있는 정보들가 비교해서 제일 많이 구독시킬수 있는 경우에서 가장 total_price가 많은 경우를 answer에 갱신하면서 다 돌고나서 answer를 출력해주는 경우이다. 처음 생각할때 너무 어떻게 해야할지 막막하였으나 그냥 막 코딩을하다보니 풀려서 놀란 case.
from itertools import product
def solution(users, emoticons):
saledata = [10,20,30,40]
중복순열할인데이터 = []
answer = [0,0]
# 우선 4의 7승의 조합을 만들자라고 생각을 하였다. => 중복순열
for i in product(saledata, repeat = len(emoticons)):
중복순열할인데이터.append(list(i))
for j in 중복순열할인데이터 :
num_subscribe = 0
total_price = 0
for user in users :
salevalue, maxprice = user
temp_price = 0
for index, salepercent in enumerate(j):
if(salevalue<=salepercent):
temp_price += (emoticons[index] * (100- salepercent) /100)
if(temp_price >= maxprice):
num_subscribe+=1
else:
total_price += temp_price
if( answer[0] < num_subscribe):
answer[0] = num_subscribe
answer[1] = int(total_price)
elif answer[0]==num_subscribe and answer[1] < total_price:
answer[1]= int(total_price)
return answer