반응형
코딩테스트 연습 - 이모티콘 할인행사 | 프로그래머스 스쿨 (programmers.co.kr)
<문제 풀이>
- 문제에서 주어진 이모티콘의 할인율을 가지고 이모티콘 할인하는 모든 경우의 수를 만들어서 체크를 했다.
- 이때 할인율은 개별적인 것이기 때문에 중복순열(itertools의 product)을 이용해 풀이를 진행했다.
- 이모티콘들의 할인율에 대하여 모든 경우를 체크한다.
- 모든 경우를 다 체크한 후, 주어진 조건 1, 2를 기준으로 answer을 정렬한 뒤 가장 조건에 부합하는 0번 index의 값을 return 한다.
<Code>
from itertools import product
def solution(users, emoticons):
answer = []
sales = [10, 20, 30, 40] # 이모티콘의 할인율
for case in product(sales, repeat=len(emoticons)): # 이모티콘마다 할인율을 적용하는 모든 경우를 체크
result = [0, 0]
for user in users: # 유저마다 이모티콘 구매 후 가격 체크
temp = 0 # user의 이모티콘 구입 지불 비용
for idx, sale in enumerate(case):
if sale >= user[0]: # 이모티콘 할인율이 유저가 원하는 할인율 이상이면 구매
temp += emoticons[idx] * (100 - sale) // 100
if temp >= user[1]: # 유저가 생각하는 예산보다 초과하는 경우 이모티콘 플러스에 가입
result[0] += 1 # result에 이모티콘 플러스 가입자 카운트 +1
else:
result[1] += temp # 이모티콘 플러스에 가입하지 않는다면 result에 이모티콘 구매 가격 누적
answer.append(result) # 해당 할인율 경우에서 구한 결과값을 answer에 추가
answer.sort(key=lambda x: (-x[0], -x[1])) # 이모티콘 플러스 가입자 최대(우선순위), 이모티콘 판매액 최대로 정렬
return answer[0]
※ 잘못된 점, 개선점 등이 있다면 언제든 댓글로 알려주시면 감사하겠습니다.
반응형
'Alogorithm > programmers' 카테고리의 다른 글
[programmers] Lv2 시소 짝꿍 - Python (0) | 2023.03.30 |
---|---|
[programmers] Lv2 택배 배달과 수거하기 - Python (0) | 2023.03.29 |
[programmers] Lv2 숫자 변환하기 - Python (2) | 2023.03.29 |
[programmers] Lv2 뒤에 있는 큰 수 찾기 - Python (0) | 2023.03.28 |
[programmers] Lv2 무인도 여행 - Python (0) | 2023.03.28 |