알고리즘 C#

백준 2839번 설탕 배달 C#으로 문제 풀어보기

minsoungdev 2025. 7. 23. 21:01

안녕하세요 박민성입니다.

 

오늘은 백준 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를 빼주는 코드를 짰습니다.

모든 변수를 해결할 수 있습니다.

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

정답이었습니다.