-
[프로그래머스] 이모티콘 할인 행사 - Python3Problem Solving 2023. 2. 26. 18:26
문제
각 이모티콘에 10, 20, 30, 40 프로의 할인율을 적용할 수 있고, 유저의 [구매 기준 할인율, 가입 기준 가격] 리스트와 이모티콘의 가격 리스트가 주어질 때, 이모티콘 플러스 가입자가 가장 높은 경우 중 이모티콘 판매 매출이 가장 높은 경우의 [가입자 수, 매출]을 반환하는 문제
https://school.programmers.co.kr/learn/courses/30/lessons/150368
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 알고리즘 분류 - 완전 탐색, 중복 조합
- 난이도 - Level 2
- 소요 시간 - 20~30분
관련 개념
중복 순열 - product()
from itertools import product product(순열을 구할 대상, repeat=순열 길이)
접근 방법
할인율을 리스트로 만들어 중복조합을 구한 후, 완전탐색으로 중복조합의 각 경우에 대해 가입자 수와 매출을 구한 후, 최대 가입자 수와 그 때의 최대 매출과 비교해 최대값을 업데이트 했다.
답안 코드
+7
from itertools import product def solution(users, emoticons): answer = [] sale = [10, 20, 30, 40] max_mem = -1 # 최대 가입자 수 max_profit = -1 # 가입자 수가 최대일 때의 최대 매출 for sales in product(sale, repeat = len(emoticons)): # 중복 순열의 각 경우에 대해 buy = {i:0 for i in range(len(users))} # {유저 인덱스: 이모티콘 구매 비용} members = 0 for i in range(len(users)): # 각 유저에 대해 구매비용, 가입여부 도출 th_sale = users[i][0] th_price = users[i][1] for j in range(len(sales)): if sales[j] >= th_sale: buy[i] += emoticons[j] * (100-sales[j]) // 100 if buy[i] >= th_price: buy[i] = 0 members += 1 break if members > max_mem: # 최대 가입자 수가 갱신되었으면 max_mem = members max_profit = sum(buy.values()) # 최대 매출 갱신 if members == max_mem: # 최대 가입자 수가 동일하면 max_profit = max(sum(buy.values()), max_profit) # 기존 최대 매출과 신규 최대 매출 중 큰 값으로 최대 매출 갱신 return [max_mem, max_profit]
'Problem Solving' 카테고리의 다른 글
[프로그래머스] 아이템 줍기 - Python3 (1) 2023.02.24 [프로그래머스] 단어 변환 - Python3 (0) 2023.02.24 [프로그래머스] 게임 맵 최단거리 - Python3 (0) 2023.02.23 [프로그래머스] 네트워크 - Python3 (0) 2023.02.22 [프로그래머스] 타겟 넘버 - Python3 (0) 2023.02.20