728x90
▶문제 : 2839번: 설탕 배달 (acmicpc.net)
▶코드 작성
#include <iostream>
using namespace std;
int main() {
int n, cnt = -1;
cin >> n;
for (int i = 0;; i++) {
int temp = n;
temp -= i * 5;//5부터 제거하여 최소개수를 구하기 유리함
if (temp >= 0 && temp % 3 == 0 && temp / 3 < 5) {//3으로 나누어 떨어지는지, 최소개수인지
cnt = i;//5를 뺀 개수
cnt += temp / 3;//3을 뺀 개수
break;
}
else if (temp < 0) break;//음수가 되면 종료
}
cout << cnt;
}
▶해석
최소 개수를 구하기 위해 5부터 제외시킨 후 3으로 나누어 떨어진다면 그것이 최소 개수이다. 이때 3으로 나눈 몫이 5 이상이라면 3과 5의 최소공배수인 15를 제외할 수 있는데 3으로 빼는 것보다 5로 빼는 것이 최소 개수이므로 3으로 나눈 몫이 5 미만일 때 최소 개수이다.
728x90
'백준(baekjoon) > C++' 카테고리의 다른 글
백준(BaekJoon) 15652 : N과 M (4) c++ (0) | 2022.07.04 |
---|---|
백준(BaekJoon) 14888 : 연산자 끼워넣기 c++ (0) | 2022.07.04 |
백준(BaekJoon) 9663 : N-Queen c++ (0) | 2022.07.01 |
백준(BaekJoon) 15651 : N 과 M (3) c++ (0) | 2022.06.29 |
백준(BaekJoon) 15650 : N 과 M (2) c++ (0) | 2022.06.29 |
댓글