-
문제 - 쓱 최대로 할인개발일지/알고리즘 2021. 12. 27. 20:57
# 문제
[30000, 2000, 1500000] # 상품의 가격 [20, 40] # 쿠폰, 할인율의 단위는 % 입니다. 다음과 같이 숫자로 이루어진 배열이 두 개가 있다. 하나는 상품의 가격을 담은 배열이고, 하나는 쿠폰을 담은 배열이다. 쿠폰의 할인율에 따라 상품의 가격을 할인 받을 수 있다. 이 때, 최대한 할인을 많이 받는다면 얼마를 내야 하는가? 단, 할인쿠폰은 한 제품에 한 번씩만 적용 가능하다.
# 풀이 과정
해당 문제는 보자마자 푸는 방법이 떠오를 정도로 일상생활에서 가깝에 느끼던 문제였다.
할인율을 최대로 적용하고 싶다면 가장 큰 가격에 높은 할인을 적용해아 한다라는 생각을 하니 정렬을 이용해야겠다는 생각을 했다 .
가격과 할인율을 내림차순으로 정렬 한 뒤 각 원소에서 한개씩 뽑아 곱해주면 가장 큰 순서대로 나올테니 가장 큰 가격에 큰 할인율이 적용이 된다. 할인되지 않은 항목도 깜박하지 않고 더해 주었더니 풀었다.
# 전체 코드
shop_prices = [30000, 2000, 1500000] # 큰거에 최대 할인율 적용 user_coupons = [20, 40] def get_max_discounted_price(prices, coupons): shop_prices.sort(reverse=True) # 가격 내림차순 정렬 user_coupons.sort(reverse=True) # 할인율 내림차순 정렬 discount_price = shop_prices # 할인된 리스트 생성 ( 할인 전 ) for i in range(len(user_coupons)): # 할인율 순회를 하면서 discount_price[i] = int( shop_prices[i] * (1-user_coupons[i] / 100)) # 순서대로 할인 적용 return sum(discount_price) # 할인된 리스트들의 합을 반환 print(get_max_discounted_price(shop_prices, user_coupons)) # 926000 이 나와야 합니다.
'개발일지 > 알고리즘' 카테고리의 다른 글
문제 - 베스트 앨범 (0) 2021.12.27 문제 - 올바른 괄호 (0) 2021.12.27 문제 - 더하거나 빼거나 (0) 2021.12.27 문제 - 배달의 민족 배달 가능 여부 (1) 2021.12.27 문제 - 문자열 뒤집기 (0) 2021.12.27