본문 바로가기

프로그래밍/PS

[C++] 백준 2839번 : 설탕배달

반응형

2839번: 설탕배달

입력의 첫 줄에서 배달해야 되는 설탕의 양 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 <= N5 * i < N으로 적어 제출하여 틀렸습니다.를 받았었고, 문제를 찾는데 오래걸렸다.

반복문을 이용하여 값을 찾을 땐 조건을 자주 검토해보자.

 

만약, A가 0이면 N이 3의 배수가 아닌 이상 5 킬로그램과 3 킬로그램으로 나눌 수 없다.

따라서 N이 3의 배수가 아닐 경우 -1을 출력한다.

A가 0보다 크면 A + B의 값을 출력한다. 여기서 B는 (N - 5 * A)를 3으로 나눈 몫이다.

반응형