본문 바로가기

코딩 이야기/백준 풀이

백준 23814번: 아 저는 볶음밥이요 C++코드(수학)

반응형

#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 임을 생각하지 못하고 풀다가 어려움을 겪음.

반응형