문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/150368
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
- 완전 탐색 문제
users와 emoticons의 최대 길이가 그렇게 크지 않으므로, 완전 탐색으로 접근
중복순열 라이브러리를 사용해서 간단하게 풀었다.
이모티콘의 할인율이 10, 20, 30, 40 중 하나이므로 중복 순열로 가능한 이모티콘들의 할인율의 조합들을 구한 후,
각 케이스 별 이모티콘 플러스 가입자 수와 판매액을 구해주었다.
from itertools import product
def solution(users, emoticons):
answer = []
sale = [10,20,30,40]
# 중복 순열
products = list(product(sale, repeat= len(emoticons)))
for pro in products:
# 사용자별 구매 금액
cost = [0] * len(users)
# 이모티콘 판매액
total = 0
# 각 이모티콘 별 사용자가 구매하는지 안하는지
for i in range(len(emoticons)):
for j in range(len(users)):
# 할인율이 더 크면
if pro[i] >= users[j][0]:
# 구매 금액 갱신
cost[j] += emoticons[i] - int(emoticons[i] * pro[i] * 0.01)
# 판매액 갱신
total += emoticons[i] - int(emoticons[i] * pro[i] * 0.01)
# 이모티콘 플러스 가입자 수
people = 0
for i in range(len(users)):
# 사용자가 지정한 금액보다 많이 구매했으면
if cost[i] >= users[i][1]:
# 구매를 취소
total -= cost[i]
# 이모티콘 플러스 가입
people += 1
answer.append([people, total])
# 이모티콘 플러스 가입자 수와 판매액이 큰 순으로 정렬
answer.sort(reverse=True)
return answer[0]
'개발 > algorithm' 카테고리의 다른 글
[프로그래머스][level3] 등산 코스 정하기 - Python (0) | 2023.01.17 |
---|---|
[프로그래머스][level3] 코딩 테스트 공부 - python (0) | 2023.01.17 |
[프로그래머스][level2] 택배 배달과 수거하기 - python (0) | 2023.01.16 |
[코드 트리] 꼬리잡기놀이 - python (0) | 2022.10.14 |
[백준 15685번] 드래곤 커브 - python (0) | 2022.10.13 |