Adventure Time - Jake [C, C++] 최대 담을 수 있는 콩의 개수가 다른 그릇에 콩 공평하게 나누어 주기 문제, 나눗셈 활용
본문 바로가기
Back-end/c,c++

[C, C++] 최대 담을 수 있는 콩의 개수가 다른 그릇에 콩 공평하게 나누어 주기 문제, 나눗셈 활용

by bogyoi 2023. 12. 26.

[조건] 콩을 나누어 주는 그릇은 4개이다. 콩의 개수는 1-16개까지로 한정한다.

그릇-1은 최대 콩1개

그릇-2는 최대 콩 3개

그릇-3는 최대 콩 5개

그릇-4는 최대 콩 7개를 담을 수 있다.

가능한 많은 그릇에 콩을 나누어 주도록 한다. 그리고 각각의 그릇에 콩이 몇개인지 출력하도록 한다.

화면은 다음과 같이 구성한다. (그릇번호가 큰 것이 우선순위를 가지도록 콩을 배분)

 

 

 

정답코드:

#include <stdio.h>
#define OFFSET 100

int main(void)
{
	int total_beans, beans1, beans2, beans3, beans4;

	printf("콩의 개수를 입력하시오 (1-16):");
	scanf_s("%d", &total_beans);

	beans1 = (total_beans +	OFFSET) / (4+ OFFSET); /*입력된 콩의 개수가 4이상인 경우 그릇-1의 콩개수는 1*/
	beans2 = (total_beans + OFFSET) / (3 + OFFSET) + (total_beans + OFFSET) / (7 + OFFSET)
		+ (total_beans + OFFSET) / (10 + OFFSET); /*입력된 콩의 개수가 3,7,10이상인 경우 각각 1씩 더해줌 */
	beans3 = (total_beans + OFFSET) / (2 + OFFSET) + (total_beans + OFFSET) / (6 + OFFSET)
		+ (total_beans + OFFSET) / (9 + OFFSET) + (total_beans + OFFSET) / (12 + OFFSET) +
		(total_beans + OFFSET) / (14 + OFFSET); /*입력된 콩의 개수가 각각 2,6,9,12,14이상인 경우 1씩 더해줌 */
	beans4 = (total_beans + OFFSET) / (1 + OFFSET) + (total_beans + OFFSET) / (5 + OFFSET)
		+ (total_beans + OFFSET) / (8 + OFFSET) + (total_beans + OFFSET) / (11 + OFFSET) +
		(total_beans + OFFSET) / (13 + OFFSET) + (total_beans + OFFSET) / (15 + OFFSET) +
		(total_beans + OFFSET) / (16 + OFFSET); /*입력된 콩의 개수가 각각 1,5,8,11,13,15,16이상인 경우 1씩 더해줌*/

	printf("그릇-1 콩의 개수(1): %d\n", beans1);
	printf("그릇-2 콩의 개수(3): %d\n", beans2);
	printf("그릇-3 콩의 개수(5): %d\n", beans3);
	printf("그릇-4 콩의 개수(7): %d\n", beans4);
}

 

콩의 개수를 16개까지로 제한하였으므로, 콩의 개수가 4개 미만일 경우 그릇-1에 있는 콩의 개수는 0이 되고, 4이상일 경우는 그릇-1에 있는 콩의 개수가 1이 된다. 따라서 offset값을 100이라는 큰 숫자로 정의해준 뒤 나눗셈을 사용했다. (c에서 정수형 나눗셈은 소수점 뒷자리를 없애고 내림해주는 성질을 활용)

 

두번째 그릇의 경우, 콩의 개수가

전체 콩의 개수가 3(3이상 7미만)이면 1개가 들어가고,

전체 콩의 개수가 7(7이상 10미만)이면 2개가 들어가고,

전체 콩의 개수가 10(10이상)이면 3개가 들어간다.

그래서 위와 같은 코드를 작성할 수 있는 것이다.

 

세번째 그릇과 네번째 그릇도 마찬가지로 코드를 작성해주면 된다.