반응형
#include<iostream>
using namespace std;
int main(){
long long n,m,k,d;
long long casearr[4];
long long caseksize[4];
cin >> d;
cin >> n >> m >> k;
long long n2 = n%d;
long long m2 = m%d;
long long maxsize = (n+m+k)/d;
casearr[0] = n/d + m/d + k/d;
caseksize[0] = k;
casearr[1] = (n + (d-n2))/d + m/d + (k-(d-n2))/d;
caseksize[1] = k-(d-n2);
casearr[2] = n/d + (m + (d-m2))/d + (k-(d-m2))/d;
caseksize[2] = k - (d-m2);
casearr[3] = (n + (d-n2))/d + (m + (d-m2))/d + (k-(d-n2) - (d-m2))/d;
caseksize[3] = k - (d-n2) - (d-m2);
long long min = 0;
long long result = 0;
for(int i=0; i<4; i++){
if(caseksize[i] > result & casearr[i] == maxsize){
result = caseksize[i];
}
}
cout << result;
}
설명
입력받은 k를 볶음밥 인원이라 생각한 다음, 볶음밥 인원에서 짜장면이나 짬뽕으로 이동하는 식으로 생각한다.
총 4가지 경우로 나눠서 계산을 한다
- 입력 받은 그대로, 즉 짜장면과 짬뽕으로 볶음밥 인원을 보내지 않았을 때
- 볶음밥 인원을 빼서 짜장면에 더해줄 때(짜장면 인원을 d의 곱에 맞춤 ex) d = 3, n = 2, m = 4, k = 10 이면 n=3, m=4, k = 10 으로 변경)
- 볶음밥 인원을 빼서 짬뽕에 더해줄 때
- 볶음밥 인원을 짜장면, 짬뽕 둘다 더해줄 때
무조건 군만두를 가장 많이 받는 개수는 (n+m+k)/d 개로 정해져있다.
그러므로 군만두를 가장 많이 받는 경우 중에 가장 볶음밥 인원이 많은 경우를 출력하면 된다.
문제점
군만두를 가장 많이 받는 개수가 (N+M+K)/d 임을 생각하지 못하고 풀다가 어려움을 겪음.
반응형
'코딩 이야기 > 백준 풀이' 카테고리의 다른 글
백준 1049번: 기타줄 C++코드(그리디 알고리즘, Greedy) (1) | 2023.03.15 |
---|---|
백준 1003번: 피보나치 함수 C++ 코드(DP, 다이나믹 프로그래밍) (0) | 2023.03.14 |
백준 1260번: DFS와 BFS C++코드(DFS, BFS) (0) | 2021.12.21 |
백준 1476번: 날짜 계산 C++코드(브루트포스, Bruteforce) (0) | 2021.12.21 |
백준 10819번: 차이를 최대로 C++ 코드(브루트포스, Bruteforce) (0) | 2021.11.19 |