승1's B(log n)

[백준 - C++] 2839번: 설탕 배달 본문

Problem Solving

[백준 - C++] 2839번: 설탕 배달

승1이 2022. 8. 14. 17:20

이번 문제는 방정식을 푸는 문제라고 할 수 있겠다. 알아둬야 할 점은 최소 개수를 출력해야 하므로 최대한 가능한 만큼 5킬로그램짜리 봉지로 채우는 것이 필요하다는 것이다.

 

바로 풀이로 이동

#include <iostream>
using namespace std;

int main(void){
    int I;	//이동시켜야 하는 설탕 그램
    int x, y;
    int xmax = -1;	//3kg 봉지의 개수
    int ymax = -1;	//5kg 봉지의 개수
    cin >> I;
    
    for(y = I; y >= 0; y--)	//우선 5kg짜리 봉지의 개수부터 구해야 최소 개수를 구할 수 있음
    {
        if(5 * y <= I)	//5kg짜리 봉지의 개수*5가 이동시켜야 하는 설탕보다 작거나 같을 때
        {
            for(x = 0; x < I; x++)	//3kg짜리 봉지의 수 구하기
            {
              if(5 * y + 3 * x == I)	//만약 5*5kg 봉지 + 3*3kg 봉지일 때
              {
                  xmax = x;	//3kg 봉지의 개수는 x
                  ymax = y;	//5kg 봉지의 개수는 y
                  break; //	inner 반복문 탈출
              }
            }
        }
        if(xmax != -1)	//만약 3kg 봉지의 개수가 -1이 아닐때, 즉 처음 시작과 다를 때
            break;	//outer 반복문 탈출
    }
    
    if(xmax == -1 && ymax == -1)	//만약 3kg, 5kg 봉지의 개수가 -1이면 -1 출력
        cout << -1 << endl;
    else if(xmax != -1 && ymax != -1)
        cout << xmax + ymax << endl;	//3kg, 5kg 봉지의 개수가 -1이 아니면 3kg 봉지 수 + 5kg 봉지 수 출력
    else if(xmax == -1 && ymax != -1)
    	cout << ymax << endl;
    else
    	cout << xmax << endl;
    return 0;
}

5kg 짜리 봉지를 넣을 수 있는 한 최대한 넣어야 최소 봉지 개수를 구할 수 있으므로 Outer loop를 5kg 봉지의 개수를 최대에서 줄여나가는 식으로 구성해보았다.

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

 

2839번: 설탕 배달

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그

www.acmicpc.net

 

Comments