0. 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/150368
1. 풀이 방법
- 문제를 보고 어떤 알고리즘을 써야 할지 좀 고민을 했다.
- 결론적으로 BF를 사용했는데, 이유는 최대 유저는 100명, 최대 이모티콘은 7개, 할인율은 4개 이므로 약 160만이기 때문이다.
- 따라서 완전 탐색을 하기로 결정했고, itertools.product를 사용해서 해결했다.
2. 코드
# 할인율이 증가 -> 구매 인원 증가 -> 구매 비용 증가 -> 서비스 가입 증가
# 할인율이 더 증가 -> 구매 인원 증가 -> 하지만 구매 비용 감소 -> 서비스 가입 감소
# BF일 때 -> 4^7 * 100 = 160만
from itertools import product
def solution(users, emoticons):
answer = [0, 0]
l_em = len(emoticons)
l_user = len(users)
max_subscriber = 0
max_profit = 0
em_discount = [[i * j // 10 for i in range(9, 5, -1)] for j in emoticons]
for discounts in product([40, 30, 20, 10], repeat = l_em):
subscriber = 0
profit = 0
for user in users:
user_profit = 0
for i in range(l_em):
if discounts[i] >= user[0]: # 할인율이 유저의 구매 허용 비율보다 높다면
user_profit += em_discount[i][discounts[i] // 10 - 1] # 할인된 금액을 넣음
if user_profit >= user[1]:
subscriber += 1
else:
profit += user_profit
answer = max(answer, [subscriber, profit])
return answer
3. 마무리
'Computer Science > 알고리즘' 카테고리의 다른 글
[프로그래머스 - Python] 118667 - 두 큐 합 같게 만들기 (1) | 2023.10.15 |
---|---|
[프로그래머스 - Python] 142085 - 디펜스 게임 (0) | 2023.10.15 |
[프로그래머스 - Python] 138476 - 귤 고르기 (1) | 2023.10.15 |
[백준 - Python] 2638 - 치즈 (0) | 2023.10.15 |
[백준 - Python] 3190 - 뱀 (0) | 2023.10.15 |