Coding Feature.

백준) 16917번: 양념 반 후라이드 반 in C 본문

코딩테스트/백준 solved.ac

백준) 16917번: 양념 반 후라이드 반 in C

codingfeature 2023. 7. 5. 22:13

Problem

 

16917번: 양념 반 후라이드 반

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

www.acmicpc.net

Solution

 

만약에 양념 3개, 후라이드 5개를 사야 한다고 가정하자.

1. 그러면 먼저 양념과 후라이드를 같은 개수의 최댓값만큼 (양념3, 후라이드3) 먼저 생각하고,

2. 이후에 나머지 값을 더해주는 식으로 계산하기로 한다.(후라이드 2)

Total Cost(Answer) = 1. + 2.

 

1.

먼저 양념 3개 후라이드 3개를 산다고 할 때,

1) 양념과 후라이드를 각자 따로 사는 게 싼지,(양념3, 후라이드3)

2) 반반 세트로 사는게 싼지,((반반세트 * 2) * 3)

비교해야 한다.

그 외의 경우는 있을 수가 없다. (예를 들어, 양념과 후라이드를 각각 2개씩 사고 반반 세트를 2개 사는 경우 등)

어차피 사야할 양념 후라이드 개수가 같은 것을 가정하고 있기 때문에 두 경우가 섞일 일은 없기 때문이다.

 

2. 

이후 남은 양념 또는 후라이드의 개수만큼 추가로 구매하야 하는데(현재 예시로는 후라이드 2) 이 때도

1) 양념 또는 후라이드만 사는게 싼지,(후라이드 2)

2) 반반세트로 사는게 싼지,((반반세트 * 2) * 2)

비교해야 한다.

사실 위 부분에서 나는 1) 경우만 생각하고 2) 경우처럼 반반세트로 주문해서 어느 한 메뉴를 남겨도 된다는 식의 생각을 놓쳐서 한 번 틀렸었다. 주의하자.

 

Code

#include <stdio.h>

int min(int A, int B){
	return (A < B)? A : B;
};

int max(int A, int B){
	return (A > B)? A : B;
};

int main(){
	int A, B, C, X, Y, K, cost = 0;
	scanf("%d %d %d %d %d", &A, &B, &C, &X, &Y);
	
	int Z = min(X, Y);
	
	cost += min(A + B, 2 * C) * Z;

	if(X > Y)
		K = A;
	else
		K = B;
		
	if(K < 2 * C)
		cost += (max(X, Y) - Z) * K;
	else
		cost += (max(X, Y) - Z) * 2 * C;
	
	printf("%d\n", cost);
	
	return 0;
}