🧩 문제
📍 정리
이모티콘 판매액을 늘리는 것 보다, 이모티콘 플러스 서비스 가입자를 최대한 늘리는 것이 우선이다.이모티콘은 10%, 20%, 30%, 40% 중 하나의 비율로 할인되며, 사용자는 자신이 설정한 기준에 맞게 이모티콘을 사거나, 이모티콘 플러스에 가입한다.
🌱 풀이과정
1️⃣ 할인율 조합 만들기
# 중복 순열로 할인율 조합 찾기
discounts = product([10,20,30,40], repeat = m)
2️⃣ 할인된 이모티콘 금액 구하기 - 사용자의 할인율 고려
for user in users:
# 사용자의 구매 기준
rate, max_cost = user
# 사용자의 이모티콘 결제 금액
buy_cost = 0
for i, emoticon in enumerate(emoticons):
if discount[i] >= rate:
# 할인된 가격
buy_cost += emoticon * (100 - discount[i]) * 0.01
user가 설정한 할인 비율보다 높다면 emoticon 가격에 할인율을 계산해 결제 금액에 추가해주었다.
3️⃣ 이모티콘 플러스 가입자 구하기
if buy_cost >= max_cost:
joiner += 1
else:
sum_cost += buy_cost
결제 금액이 user가 설정한 최대 구매 가능 금액 보다 높거나 같다면 이모티콘 플러스 유저를 하나 증가시킨다.
낮다면 sum_cost 변수에 값을 저장한다.
4️⃣ 최종 결과 업데이트
# 이모티콘 플러스 가입자가 더 많은 경우
if total_joiner < joiner:
total_joiner = joiner
total_cost = sum_cost
# 가입자 수는 같은데, 판매액이 더 많은 경우
elif total_joiner == joiner:
if total_cost < sum_cost:
total_cost = sum_cost
계산한 이모티콘 플러스 가입자가 현재 total_joiner 보다 많다면 값을 갱신하고, 판매액도 갱신해준다.
가입자 수가 같은데 판매액이 더 많다면, 판매액만 갱신해준다.
그리고 마지막에 해당 값을 반환해준다.
👩🏻💻 전체코드
from itertools import product
def solution(users, emoticons):
# 사용자 수, 이모티콘 수
n, m = len(users), len(emoticons)
# 이모티콘 플러스 가입자
total_joiner = 0
# 이모티콘 매출액
total_cost = 0
# 중복 순열로 할인율 조합 찾기
discounts = product([10,20,30,40], repeat = m)
for discount in discounts:
# 각 조합별 이모티콘 판매액, 플러스 가입자 수
sum_cost = 0
joiner = 0
for user in users:
# 사용자의 구매 기준
rate, max_cost = user
# 사용자의 이모티콘 결제 금액
buy_cost = 0
for i, emoticon in enumerate(emoticons):
if discount[i] >= rate:
# 할인된 가격
buy_cost += emoticon * (100 - discount[i]) * 0.01
if buy_cost >= max_cost:
joiner += 1
else:
sum_cost += buy_cost
# 이모티콘 플러스 가입자가 더 많은 경우
if total_joiner < joiner:
total_joiner = joiner
total_cost = sum_cost
# 가입자 수는 같은데, 판매액이 더 많은 경우
elif total_joiner == joiner:
if total_cost < sum_cost:
total_cost = sum_cost
return [total_joiner, total_cost]
'알고리즘' 카테고리의 다른 글
[BOJ / Python] 11060번 점프 점프 (0) | 2023.05.03 |
---|---|
[프로그래머스 / Python] 달리기 경주 (0) | 2023.04.07 |
[프로그래머스 / Python] 주식가격 (0) | 2023.04.01 |
[프로그래머스 / Python] 공원 산책 (0) | 2023.03.30 |
[프로그래머스 / Python] 단어 변환 (0) | 2023.03.23 |