본문 바로가기
Language/C++

[BOJ][C++] 2839 설탕옮기기

by 별토끼. 2018. 12. 12.
반응형

[BOJ][C++] 2839 설탕옮기기


문제

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


풀이

우선 설탕 전체를 5kg 봉지로 최대 몇 봉지를 넣는지 구했습니다. 

5의 배수일 경우 이것이 최소값이므로 그대로 종료합니다. 

그렇지 않을 경우, 5kg 봉지의 최댓값에서 for문으로 값을 내리면서 3의 배수(3kg 봉지에 담을 수 있는 최소값)를 찾을 때까지 반복합니다. 만약 값이 나오지 않을 경우 bool값을 두어 -1이 출력되도록 했습니다.

이 때, 5kg봉지가 최대인 값을 리턴해야하기 때문에 3의 배수가 나타나면 바로 for문을 중단합니다. 


코드

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
31
32
33
34
35
36
37
38
#include <iostream>
using namespace std;
int main() {
    //3키로 5키로
    //18키로 = 3 * 6   ==> 6봉지
    //         = 5 * 3 + 3 * 1 ==> 4봉지
    //최소 봉지?
    int n; // kg수
    cin >> n;
 
    int five_num, three_num;
    five_num = n / 5;                                 // 5kg의 최대 봉지수
 
    int result_five, result_three;                    // 최종 봉지 수
    int isOK = false;
 
    if (n % 5 != 0) {                                // 5의 배수가 아닐 경우
        for (int i = five_num; i >= 0; i--) {
            int tmp = (n - (i * 5));                
            if (tmp%3==0) {                            // 3의 배수일 경우 for문 종료
                three_num = tmp / 3;
                result_five = i;
                result_three = three_num;
                isOK = true;
                break;
            }
        }
    }
    else {                                            // 5의 배수일 경우
        result_five = n / 5;
        result_three = 0;
        isOK = true;
    }
    if (isOK) {                                        // 봉지 수가 구해질 경우
        cout << result_five + result_three;
    }else                                            // 봉지 수가 
        cout << "-1";
}
cs


반응형

댓글