문제
리뷰
3kg 또는 5kg 봉지를 최소 개수로 활용해서 N kg을 맞추면 된다.
봉지의 개수가 최대일 때는 3kg 만 이용하는거니까 N / 3 개가 최대 개수가 된다.
즉, N =18kg 일 때, 18 / 3 = 6봉지가 최대 개수다.
그래서 3kg 을 0개 이용할 때 부터 6개 이용하는 경우까지 확인하도록 반복문을 만들었다.
int maxN = N/3;
for(int i = 0; i <= maxN; i++ ){
int cnt = i; // 봉지 개수
int sum = N-(i*3); // 3kg 곱해서 N에서 뺀 kg
if( sum % 5 == 0){
cnt += (sum/5);
min_cnt = min(cnt, min_cnt);
}
}
3kg 봉지를 몇개 이용하고, 나머지 kg은 sum이 된다.
만약, 5kg 봉지로 sum이 나누어 떨어진다면, 정확하게 N kg을 맞출 수 있는 경우다!
여기서 min_cnt를 갱신할 수 있다.
마지막에서 최소 봉지 개수 min_cnt 가 여전히 2e9로 초기값과 같다면, -1을 출력한다.
if(min_cnt == 2e9) cout << -1;
else cout << min_cnt;
맞은 코드
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int N;
int min_cnt = 2e9; // 최소 봉지 개수
int main(void){
scanf("%d", &N); // 목표 kg
int maxN = N/3;
for(int i = 0; i <= maxN; i++ ){
int cnt = i; // 봉지 개수
int sum = N-(i*3); // 3kg 곱해서 N에서 뺀 kg
if( sum % 5 == 0){
cnt += (sum/5);
min_cnt = min(cnt, min_cnt);
}
}
if(min_cnt == 2e9) cout << -1;
else cout << min_cnt;
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
N과 M (3),(4) (0) | 2020.10.20 |
---|---|
N과 M(1), (2) (0) | 2020.10.20 |
분해합 백준 2231번 c++ (0) | 2020.10.07 |
소트인사이드 백준 1427번 (0) | 2020.10.02 |
수 정렬하기3 백준 10989번 (0) | 2020.10.02 |