알고리즘 문제(SOL)

[백준/16917/파이썬] 양념 반 후라이드 반

https://www.acmicpc.net/problem/16917

 

16917번: 양념 반 후라이드 반

현진 치킨에서 판매하는 치킨은 양념 치킨, 후라이드 치킨, 반반 치킨으로 총 세 종류이다. 반반 치킨은 절반은 양념 치킨, 절반은 후라이드 치킨으로 이루어져있다. 양념 치킨 한 마리의 가격은

www.acmicpc.net

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)