백준 2839번 설탕 배달 C#으로 문제 풀어보기
안녕하세요 박민성입니다.
오늘은 백준 2839번 설탕 배달을 풀어보겠습니다.

문제를 보면
입력은 3보다 크거나 같고 5000보다 작은 정수가 주어줍니다.
출력은 봉지의 최소 개수를 출력합니다.
봉지의 최소 개수를 구하는 방법은 입력이 들어오면 그 수는 설탕의 총량이 됩니다.
3, 5킬로 설탕을 담을 수 있는 봉지가 있는데 예를 들어 15는 3킬로 봉지로 5개를 사용하여서 다 담을 수 있지만
5킬로 봉지로는 3개만 있어도 다 담을 수 있습니다.
결국 5킬로 봉지를 최대한 많이 써야 사용한 봉지의 최소를 구할 수 있다고 생각했습니다.
그리고 만약 7같이 3과 5킬로 봉지로 딱 떨어지게 못 담는다면 -1을 출력합니다.

일단은 설탕의 총량을 입력받아서 변수 a에 담습니다.
그리고 사용한 봉지의 횟수를 세기 위해 count 변수도 만들어줍니다.
마지막으로 can이라는 불 변수는 만약 7, 2, 1같이 딱 떨어지지 않는 수는 -1을 출력을 해야 하기 때문에 만들었습니다
저는 문제를 보고 처음에는 5킬로 봉지를 많이 사용해야 봉지의 최소 개수를 구할 수 있다고 생각하여
무작정 이렇게 코드를 짰습니다

while 문을 사용하여 a가 5보다 작을 때까지 5킬로 봉지를 사용하고 a가 5보다 작으면 3킬로 봉지를 사용하였습니다.
사용할 때마다 count 값을 올려주고 만약 a가 0으로 딱 떨어지면 while문을 break하고 음수가 된다면 딱 떨어지지 않다고
생각하여 can을 false로 만든 후에 break를 하였습니다.
그리고 can이 true or false로 count를 출력할지 -1을 출력할지 정해줍니다
하지만 코드에 문제점이 있습니다. 만약 9, 6같이 5를 사용하면 안 되고 3만 사용하여야지 딱 떨어지는 수들이 있었습니다
예전에 저는 초점을 5를 최대한 사용하고 나머지를 3을 사용하면 된다고 생각했습니다.
하지만 5를 처음부터 사용하든 나중에 사용하든 봉지의 최소 사용 개수는 같다라는 걸 간과하였습니다.
그리하여

만약 5로 나눈 나머지가 0이면 계속 5를 빼주는 코드를 짰습니다.
모든 변수를 해결할 수 있습니다.

이것이 전체 코드입니다. 이렇게 백준에 제출하였더니

정답이었습니다.