티스토리 뷰

반응형

상근이가 최소로 옮기면 되는 설탕 봉지가 몇 봉지인지 구하는 문제

 


문제의 조건

 

1. 상근이는 설탕을 정확하게 N kg을 배달해야 한다. 

 

2. 하지만 상근이는 좀 귀찮아서 최대한 적은 봉지를 배달하고 싶다. 

 

3. 상근이가 배달할 수 있는 설탕 봉지의 무게는 3kg과 5kg 짜리 두 가지가 있다. 

 

4. 두 종류의 설탕 봉지들만 사용해서 가장 적게 가져갈 수 있는 봉지가 몇 봉지인지 구하기

 

5. 만약 정확하게 N kg을 배달할 수 없으면 -1을 리턴한다. 

 


풀이 과정

 

1. 상근이는 최대한 적은 봉지를 배달하고 싶기 때문에 5kg 짜리를 최대한 많이 쓰는 것이 이득이다. 

 

2. 그렇기 때문에 먼저 5kg 짜리로 N kg을 나눠본 후 0으로 나눠 떨어지면 그 몫이 정답이다. 

 

3. 하지만 2번에서 나눠 떨어지지 않는다면 3kg 짜리를 하나씩 추가해 보면서 총 배달 봉지 수를 증가시키고 

N에서는 3씩 빼면서 남은 수를 다시 5로 나눠본다. 

3을 빼고 남은 수가 5로 나눠지면 그 전까지 증가된 배달 봉지 수에 5로 나눈 몫을 더하면 최소 봉지 수를 구할 수 있다. 

 

4. 3번 과정을 거쳤는데도 0으로 나눠 떨어지지 않으면 -1 출력 

 


 

#include <iostream>

using namespace std;

int main(int argc, const char * argv[])
{
    int kg;
    cin >> kg;
    
    int answer = 0;
    while (0 <= kg)
    {
        if (0 == kg % 5)
        {
            answer += kg / 5;
            cout << answer;
            return 0; //현재 kg이 5로 나눠 떨어지면 바로 정답 출력하고 종료 
        }
        
        kg -= 3;
        answer++; //아니라면 3씩 빼면서 정답 수를 증가시킨다. 
    }
    
    cout << -1; //반복문에서 종료되지 못했으면 3, 5를 이용해서 N만큼 정확하게 배달할 수 없다는 뜻이다. 
    
    return 0;
}
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함