※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 26070번 문제인 곰곰이와 학식이다.
문제는 아래 링크를 확인하자.

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

 

26070번: 곰곰이와 학식

첫 번째 줄에 치킨을 먹고 싶은 곰곰이의 마릿수 $A$, 피자를 먹고 싶은 곰곰이의 마릿수 $B$, 햄버거를 먹고 싶은 곰곰이의 마릿수 $C$가 공백으로 구분되어 주어진다. $(0\le A,B,C\le 10^{9})$ 두 번째

www.acmicpc.net

가능한 세 종류의 쿠폰 교환을 한번에 전부 이용하지 않는 방법중에 최대로 먹일 수 있는 방법이 항상 존재함을 관찰하자.

 

따라서 교환하지 않을 쿠폰을 하나 정하고, 각 경우에 대한 문제의 해답을 구해 그중 최댓값을 출력하는 것으로 문제를 해결할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;
typedef long long ll;

ll A, B, C;
ll X, Y, Z;

ll ans1, ans2, ans3;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> A >> B >> C >> X >> Y >> Z;
	{
		ll a = A, b = B, c = C, x = X, y = Y, z = Z;
		ans1 += min(a, x);
		x -= min(a, x); y += x / 3;
		ans1 += min(b, y);
		y -= min(b, y); z += y / 3;
		ans1 += min(c, z);
	}
	{
		ll a = A, b = B, c = C, x = X, y = Y, z = Z;
		ans2 += min(b, y);
		y -= min(b, y); z += y / 3;
		ans2 += min(c, z);
		z -= min(c, z); x += z / 3;
		ans2 += min(a, x);
	}
	{
		ll a = A, b = B, c = C, x = X, y = Y, z = Z;
		ans3 += min(c, z);
		z -= min(c, z); x += z / 3;
		ans3 += min(a, x);
		x -= min(a, x); y += x / 3;
		ans3 += min(b, y);
	}

	cout << max(ans1, max(ans2, ans3));
}
728x90

+ Recent posts