반응형
https://school.programmers.co.kr/learn/courses/30/lessons/150368
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
from itertools import product
def solution(users, emoticons):
register_user_count = 0
max_price = 0
discounts = product([10,20,30,40],repeat=len(emoticons))
# 모든 할인율 중복 조합
for discount in discounts:
# 각 조합마다 산 유저 수 / 최대 판매 금액
user_count = 0
sum_price = 0
# 각 유저마다
for user in users:
# 구매 비용
paid = 0
# 구매 비용 계산
# 이모티콘마다
for i in range(len(emoticons)):
# 할인율이 유저 기준보다 높거나 같다면
if(discount[i] >= user[0]):
# 구매 비용에 추가
rate = (100 - discount[i])
price100 = emoticons[i] * rate
# print(price100 // 100)
paid += price100 // 100
# 본인이 낸 돈이 기준보다 높다면
if(paid >= user[1]):
# 이모티콘 플러스 등록
user_count += 1
# 아니라면
else:
# 총 판매금액에 추가
sum_price += paid
if(register_user_count < user_count):
register_user_count = user_count
max_price = sum_price
elif (register_user_count == user_count):
if(max_price < sum_price):
max_price = sum_price
return [register_user_count,max_price]
빠르게 풀 수 있는 방법은
파이썬 내장 라이브러리인
from itertools import product
를 통해 중복순열을 구현하면 편하다.
어느 할인율이 가장 높은 가격을 가질지 확인할 수 없으며,
유저 수와 할인율의 제한이 100명, 4개씩 7개의 이모티콘의 종류만이 존재하므로
브루트포스 알고리즘을 통해서 충분히 구현 가능하다고 판단되므로, 모든 할인율의 순열을 뽑아서
각 할인율마다 사용자가
- 이모티콘 플러스를 구매할지
- 이모티콘을 개별 구매할지
판단하고, 이에 맞는 숫자를 갱신해나가면
마지막에 최대 사용자 수와 가격을 얻을 수 있다.
728x90
'개발 > 문제풀이' 카테고리의 다른 글
[BOJ 27211, Python] 도넛 행성 풀이 (0) | 2023.02.01 |
---|---|
[BOJ 27210, Python] 신을 모시는 사당 풀이 (0) | 2023.02.01 |
백준 1697,12851,13913 파이썬 풀이 (숨바꼭질 1, 숨바꼭질 2, 숨바꼭질 3) (0) | 2021.04.08 |
백준 1927번 최소 힙 파이썬 문제풀이 (0) | 2021.02.15 |
2월 1주차 백준 문제풀이 파이썬(듣보잡, 회의실 배정, 바이러스, 최대 힙, 집합 연결요소의 개수, 좌표압축) (0) | 2021.02.08 |