https://www.acmicpc.net/problem/16917
Problem
- 현진 치킨에서 판매하는 치킨은 양념 치킨, 후라이드 치킨, 반반 치킨으로 총 세 종류이다. 반반 치킨은 절반은 양념 치킨, 절반은 후라이드 치킨으로 이루어져있다. 양념 치킨 한 마리의 가격은 A원, 후라이드 치킨 한 마리의 가격은 B원, 반반 치킨 한 마리의 가격은 C원이다.
조건
- 상도는 오늘 파티를 위해 양념 치킨 최소 X마리, 후라이드 치킨 최소 Y마리를 구매하려고 한다. 반반 치킨을 두 마리 구입해 양념 치킨 하나와 후라이드 치킨 하나를 만드는 방법도 가능하다. 상도가 치킨을 구매하는 금액의 최솟값을 구해보자.
- 1 ≤ A, B, C ≤ 5,000
- 1 ≤ X, Y ≤ 100,000
SOL
예외처리가 있어서 생각보다는 어렵게 느껴졌던 문제이다.
이런 문제들은 , 반복문을 돌아가면서 시뮬레이션을 할지, 수학적인 관계를 이용할지 입력의 크기를 보고 결정해야함.
100,000이니까, O(N)으로 반복문을 1번 돌아준다고 생각하면 된다.
처음 풀때는, IF/else로만 분기점을 나눠서, 수학적인 관계로 반복문을 없애보면서 구현을 하는 연습을 해봄!
# 후라이드,양념,반반 3개
# B,A,C
# 양념 최소 X마리, 후라이드 최소 Y마리
# 반반을 2마리 구입해서, 후라이드 ,양념 1개를 만드는 방법도 가능
import sys
input= sys.stdin.readline
A,B,C,X,Y = map(int,input().split())
total=0
chicken=(X+Y)//2
# 셋트의 갯수가 각각의 치킨의 수 보다 클 수 가 있다.
# 예를들어, 9000 + 1 = 4500셋트지만, 후라이드가 1개밖에 없으니까, 1세트로 산다고 생각
if X<chicken:
chicken=X
elif Y<chicken:
chicken=Y
# 1마리,1마리 사는것보다 ,반반 2개를 사는게 저렴한 경우
if (A+B)<2*C:
total+=(chicken)*(A+B)
X-=chicken
Y-=chicken
else:
total+=(chicken)*(2*C)
X-=chicken
Y-=chicken
# 셋트로 다 처리 완료.
# 남은 치킨을 사야한다.
if X==0:
if B<2*C:
total+=Y*B
else:
total+=(2*C)*Y
if Y==0:
if A<2*C:
total+=X*A
else:
total+=(2*C)*X
print(total)
'알고리즘 문제(SOL)' 카테고리의 다른 글
[백준/1920/파이썬] 수 찾기 (0) | 2022.02.11 |
---|---|
[백준/16922/파이썬] 로마 숫자 만들기 (0) | 2022.02.10 |
[백준/파이썬/16968] 차량 번호판 1 (0) | 2022.02.09 |
[백준/17086/파이썬] 아기 상어 2 (0) | 2022.02.09 |
[백준/12015/파이썬] 가장 긴 증가하는 부분 수열2 (0) | 2022.02.08 |