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

 

이번에 볼 문제는 백준 23814번 문제인 아 저는 볶음밥이요이다.
문제는 아래 링크를 확인하자.

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

 

짜장면을 추가로 더 시켜 군만두를 하나 추가로 얻기 위해 더 주문해야 하는 양을 X, 짬뽕에 대해 같은 값을 Y라 하자. 이 때 짜장면과 짬뽕을 각각 X, Y개 초과로 주문하는 것은 항상 최선의 경우가 아님을 관찰하자. 초과한 만큼의 짜장면과 짬뽕은 각각 볶음밥으로 바꿔 주문해도 얻게 되는 군만두의 양은 변하지 않기 때문이다. 이는 짜장면과 짬뽕을 각각 XY보다 적게 추가 주문할 때에도 마찬가지이다.

 

따라서, 짜장면과 짬뽕, 짜장면만, 짬뽕만, 둘 다 추가주문하지 않는 네 가지 경우에 대하여 군만두를 최대로 얻는 경우가 무엇인지 살펴 그 때의 볶음밥 주문량의 최댓값을 구해 문제를 해결하자.

 

K의 값이 충분히 크지 않아 짜장면과 짬뽕을 충분히 추가주문하지 못하는 경우도 생길 수 있음에 유의하여 구현하자.

 

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

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

ll D, N, M, K;
vector<pair<ll, ll>> P;
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> D >> N >> M >> K;
	N %= D, M %= D;
	N = D - N, M = D - M;

	P.emplace_back(make_pair(K / D, K));
	P.emplace_back(make_pair((K - N) / D + 1, K - N));
	P.emplace_back(make_pair((K - M) / D + 1, K - M));
	P.emplace_back(make_pair((K - N - M) / D + 2, K - N - M));
	sort(P.begin(), P.end());
	while (P.back().second < 0) P.pop_back();
	cout << P.back().second;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 7146 // C++] 데이터 만들기 7  (0) 2024.05.27
[BOJ 24229 // C++] 모두싸인 출근길  (0) 2024.05.26
[BOJ 16493 // C++] 최대 페이지 수  (0) 2024.05.24
[BOJ 31867 // C++] 홀짝홀짝  (0) 2024.05.23
[BOJ 31866 // C++] 손가락 게임  (0) 2024.05.22

+ Recent posts