Odds and Ends

백준 : 15720번 카우버거 [파이썬, 실버5, 사칙연산] 본문

코딩 테스트

백준 : 15720번 카우버거 [파이썬, 실버5, 사칙연산]

Squidward 2022. 8. 1. 17:41

문제

윤진이는 이번에 카우버거 알바생으로 뽑히게 되었다. 그녀는 카우버거를 평소에 이용하면서 들었던 의문점 한가지가 있었다.

"카우버거에는 왜 세트 메뉴에 대한 할인이 존재하지 않는가?"

따라서 윤진이의 아이디어로 카우버거에 세트 할인을 도입하고자 한다. 세트 메뉴는 버거 1개, 사이드 메뉴 1개, 음료 1개를 선택 할 경우 각각의 제품에 대해서 10%의 세트 할인을 적용하는 방식으로 진행된다.

하지만 카우버거 점주는 POS기의 소프트웨어가 오래되어 세트 할인에 대한 내용을 추가할 수가 없었다. 따라서 소프트웨어학부에 재학 중인 윤진이는 전공을 살려 직접 프로그램을 만들어보려고 한다. 윤진이를 도와 POS기에 들어갈 세트 할인에 대한 프로그램을 작성해보자.

입력

첫째 줄에는 주문한 버거의 개수 B, 사이드 메뉴의 개수 C, 음료의 개수 D가 공백을 사이에 두고 순서대로 주어진다. (1 ≤ B, C, D ≤ 1,000)

둘째 줄에는 각 버거의 가격이 공백을 사이에 두고 주어진다.

셋째 줄에는 각 사이드 메뉴의 가격이 공백을 사이에 두고 주어진다.

넷째 줄에는 각 음료의 가격이 공백을 사이에 두고 주어진다.

각 메뉴의 가격은 100의 배수이며, 10000원을 넘지 않는다.

출력

첫째 줄에는 세트 할인이 적용되기 전 가격을 출력한다.

둘째 줄에는 세트 할인이 적용된 후의 최소 가격을 출력한다.

예제 입력 

3 3 2 # 버거, 사이드, 음료 개수
2000 3000 2500 # 버거 가격
800 1300 1000 # 사이드 가격
500 1000 # 음료 가격

예제 출력 

12100 # 할인 전 가격
11170 # 할인 후 가격

힌트

입력 예에 나온 메뉴들의 가격을 모두 합하면 12100원이다.

첫 번째 세트는 3000원짜리 버거, 1300원짜리 사이드메뉴, 1000원짜리 음료로 구성하면 5300 * 0.9 = 4770원이다.

두 번째 세트는 2500원짜리 버거, 1000원짜리 사이드메뉴, 500원짜리 음료로 구성하면 4000 * 0.9 = 3600원이다.

남은 2000원짜리 버거와 800원짜리 사이드메뉴는 음료가 없으므로 세트 할인을 받을 수 없다. 따라서 세트 할인이 적용된 후의 최소 가격은 4770+3600+2800 = 11170원이 된다.

 

[문제 풀이]

: 최소 가격이니까 최대한 할인을 많이 받아야한다. 따라서 세트를 만들 때 가격이 높은 것부터 추가한다. -> 정렬

b, c, d = map(int, input().split()) # 버거, 사이드, 음료 개수 입력

burger = list(map(int, input().split())) # 버거 가격 배열
side = list(map(int, input().split())) # 사이드 가격 배열
drink = list(map(int, input().split())) # 음료 가격 배열

# 정렬 -> 비싼 것부터 처리하기 위해
burger.sort(reverse=True)
side.sort(reverse=True)
drink.sort(reverse=True)

result = 0 # 할인된 값 (=출력값)
min_value = min(b, c, d) # 세트 수
for i in range(min_value) : # 세트 수 만큼 반복문
  result += (burger[i] + side[i] + drink[i]) * 0.9 # 차례대로 더해서 0.9 곱해줌. = 할인 

# 세트로 못만든 나머지 값 더해줌
result += sum(burger[min_value::])
result += sum(side[min_value::])
result += sum(drink[min_value::])

print(sum(burger) + sum(side) + sum(drink)) # 할인전 가격
print(int(result)) # 할인 후 가격
728x90