ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 문제 - 쓱 최대로 할인
    개발일지/알고리즘 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

    댓글

Designed by Tistory.