2839번: 설탕 배달
상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그
www.acmicpc.net
이 문제를 처음 접했을 때 생각한 방법은 n의 값을 받아온 다음 5를 최대한 빼고 그 다음에 3을 빼는 방식을 선택했습니다.
하지만 이렇게 되니 문제점이 나왔습니다. 11의 경우에 5, 3, 3으로 가능하지만 5, 5, X가 되어서 -1이 나오는 것이었습니다.
그래서 다른 방식을 선택을 하였는데 fiveCount라는 5를 얼마나 뺄 수 있는지를 늘려가면서 하는 것이었습니다. 이 방식도 귀찮은게 break식을 정하는 것이 까다로운 것 같아서 이 생각으로 진행을 하다가 그만뒀습니다.
다음에 이 문제를 풀 수 있게 만들어준 생각인데 fiveCount를 처음에 구해주고나서 fiveCount를 줄여가면서 하는 것이었습니다. 이렇게 되면 5가 가장 많을 때 부터 시작을 해서 fiveCount를 하나씩 줄어주면서 계속 확인이 가능했습니다.
이러한 방식으로 생각을 하고 코딩을 한 다음 제출 하였을 때 성공했습니다.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
//상근이는 사탕가게에 정확하게 N킬로그램을 배달해야한다.
//설탕 봉지는 3키로와 5키로가 있다.
//최대한 적은 봉지를 들고가려고 한다.
//ex) 18kg이면 5키로 3개 3키로 1개 처럼
int main()
{
int n; int checkN;
scanf("%d",&n);
checkN = n;
int fiveCount = 0;
while (checkN > 0) {
checkN -= 5;
fiveCount++;
}
if (checkN < 0) { //5로 더 이상 안되는 상태에서 -를 해줬기 떄문에 음수가 나온다. 그렇기에 fiveCount--를 한번 해준다.
fiveCount--;
}
int count = 0;
int backupN = n;
while (1) {
n = backupN;
count = 0;
if (fiveCount < 0) {
printf("-1");
break;
}
for (int i = 0; i < fiveCount; i++) {
n -= 5;
count++;
}
if (n == 0) {
printf("%d", count);
break;
}
while (n > 0) {
n -= 3;
count++;
}
if (n == 0) {
printf("%d", count);
break;
}
fiveCount--;
}
}
'백준 문제 풀이 & C++ 공부' 카테고리의 다른 글
백준 4553번 C/C++ (0) | 2021.06.14 |
---|---|
백준 2869번 C/C++ (0) | 2021.03.01 |
백준 2798번 C/C++ (0) | 2021.02.27 |
백준 2275번 C/C++ (0) | 2021.02.27 |
백준 2805번 C/C++ (0) | 2021.02.24 |