반응형
https://www.acmicpc.net/problem/2839
풀이
○ 5킬로의 봉지와 3킬로의 봉지가 있다. 봉지를 최소한으로 쓰려면 어덯게 해야할까?
정답은 3킬로의 봉지를 최소한으로 쓰면 된다.
○ 만약 입력한 수가 5로 나누었을 때 나머지가 0이라면 3킬로의 봉투를 쓸 필요가 없으니 입력한 수/5
만큼의 봉투가 정답이 된다.
○ 입력한 수가 5로 나누어 떨이지지 않는다면 어덯게 해야할까? 3의 봉투를 최소한으로 써야된다는 것을
생각하면 된다. 입력한 수-(3의배수)을 해보고 5로나누어떨어지는지 확인한다.
또한 (입력한 수) - (3의배수)가 0이라면 입력수는 3의 배수이다.
i) 입력 수 -3 이 5로 나누어 떨이지는가? 안떨어진다면
ii) 입력 수 -6 이 5로 나누어 떨어지는가? 안떨어진다면
iii) 입력 수 -9 이 5로 나누어 떨어지는가? ... (반복)
○ 위 반복을 계속하다가 (입력한 수) - (3의배수) 가 3보다 작으면 어덯게 될까? 5와3 봉투로는 정확히
담을 수 없는 양이된다. 그러므로 -1을 출력하면 된다. 코드를 통해 확인해보자
○ C언어 풀이
#include<stdio.h>
int main() {
int n;
scanf("%d", &n);
int x, y;
int number
int i = 1;
int answer;
while (1) {
number = n - (3 * i);
if (n % 5 == 0) {
answer = n / 5;
break;
}
if (number % 5 == 0||number==0) { //5로 나누어 떨어지거나 number가 0이면 3의배수임
answer = number / 5 + i;
break;
}
if (number <= 2) {
answer = -1;
break;
}
i++;
}
printf("%d", answer);
}
○ C++ 풀이
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int x, y;
int number;
int i = 1;
int answer;
while (1) {
number = n - (3 * i);
if (n % 5 == 0) {
answer = n / 5;
break;
}
if (number % 5 == 0 || number == 0) {
answer = number / 5 + i;
break;
}
if (number <= 2) {
answer = -1;
break;
}
i++;
}
cout << answer;
}
반응형
'백준' 카테고리의 다른 글
백준 1978번[c언어] : 소수 찾기 (0) | 2022.03.20 |
---|---|
백준 10757번[c언어] : 큰 수 A+B (0) | 2022.03.20 |
백준 10250번[C언어] : ACM호텔 (0) | 2022.03.09 |
백준 1712번[C언어] : 손익분기점 (0) | 2022.03.07 |
백준 1065번[C언어] : 한수 (0) | 2022.03.05 |
댓글