백준 2839번 설탕 배달 (C#)

김보근·2025년 6월 27일

백준

목록 보기
38/62

백준 2839번 설탕 배달 (C#)


https://www.acmicpc.net/problem/2839

오늘은 백준 2839번 설탕 배달 문제를 풀어봤다.

처음에는 무작정 if랑 while문으로 접근했는데, 자꾸 원하는 결과가 안 나오길래 로직을 다시 차근차근 정리해봤다.
핵심은 5kg 봉지를 최대한 먼저 쓰고, 안되면 3kg을 하나씩 써보면서 나눠지는지 확인하는 것이었다.

문제 요약

  • 설탕 Nkg을 배달해야 한다.

  • 설탕은 오직 3kg 봉지와 5kg 봉지만 사용 가능하다.

  • 최소 봉지 개수로 설탕을 정확하게 배달해야 한다.

  • 정확하게 나눌 수 없다면 -1을 출력해야 한다.

접근 방법

처음엔 5로 나눠질 때까지 3을 빼는 방식이 떠올랐고, 이것만 잘 구현하면 되겠다고 생각했다.

핵심 포인트는:

  • n % 5 == 0 이면 가장 이상적인 경우이므로 바로 5로 나눈 몫을 정답으로 출력

  • 안되면 3kg 하나 썼다고 생각하고 n -= 3, 봉지 수 count++

  • n이 0보다 작아지면 더 이상 나눌 수 없으므로 -1

C코드

using System;

namespace backjoon
{
    internal class Program
    {
        static void Main()
        {
            int n = int.Parse(Console.ReadLine());
            int count = 0;

            while (n >= 0)
            {
                if (n % 5 == 0)
                {
                    count += n / 5;
                    Console.WriteLine(count);
                    return;
                }
                n -= 3;
                count++;
            }

            Console.WriteLine(-1);
        }
    }
}

내가 배운 점

처음에는 while(count > 5 || count > 3) 이런 식으로 조건을 잘못 설정해서 원하는 결과가 안 나왔다.
결국 핵심은 계속해서 3kg 하나씩 써보면서 5로 정확히 나눠지는 시점을 찾는 것이었다.

또한 n % 5 == 0이면 n / 5는 딱 맞게 떨어지므로 이때 바로 출력하고 종료하는 방식도 깔끔하다고 느꼈다.
이 문제 덕분에 조건문 순서와 반복문 설계에 대해 더 생각해보게 되었다.

profile
게임개발자꿈나무

0개의 댓글