반응형
입력의 첫 줄에서 배달해야 되는 설탕의 양 N 킬로그램이 주어진다.
설탕을 나눠 담을 수 있는 단위는 5 킬로그램과 3킬로그램으로 제한돼 있다.
여기서 더 적은 갯수의 봉지로 나눠 담아 가려면, 5 킬로그램 봉지의 비중을 최대한 많게 해야한다.
#include <iostream>
using namespace std;
int main() {
int N;
scanf("%d", &N);
int A = 0;
for (int i = 0; 5 * i <= N; i++) {
if ((N - 5 * i) % 3 == 0)
A = i;
}
if (A == 0 && N % 3 != 0)
printf("-1\n");
else
printf("%d\n", A + (N - 5 * A) / 3);
return 0;
}
위 코드 중 for문에서는 i의 값을 계속 증가시키며 5 * A + 3 * B = N을 만족하는 가장 큰 A를 찾는다.
나는 for문 조건에 5 * i <= N을 5 * i < N으로 적어 제출하여 틀렸습니다.를 받았었고, 문제를 찾는데 오래걸렸다.
반복문을 이용하여 값을 찾을 땐 조건을 자주 검토해보자.
만약, A가 0이면 N이 3의 배수가 아닌 이상 5 킬로그램과 3 킬로그램으로 나눌 수 없다.
따라서 N이 3의 배수가 아닐 경우 -1을 출력한다.
A가 0보다 크면 A + B의 값을 출력한다. 여기서 B는 (N - 5 * A)를 3으로 나눈 몫이다.
반응형
'프로그래밍 > PS' 카테고리의 다른 글
[C++] 백준 2798번: 블랙잭 (0) | 2020.09.20 |
---|---|
[C++] 백준 10250번: ACM 호텔 (0) | 2020.09.20 |
[C++] 백준 1929번: 소수 구하기 (0) | 2020.09.20 |
[C++] 백준 9012번: 괄호 (0) | 2020.09.19 |
[C++] 백준 1654번: 탈출 조건에 대하여 (0) | 2020.09.11 |