[C#] 백준 2839번 설탕 배달

2021. 12. 21. 22:39C#/[백준] 기본 수학1

문제

정답 코드 :

using System;

namespace _7
{
    class Program
    {
        static void Main(string[] args)
        {
            int input = Convert.ToInt32(Console.ReadLine());
            int inputSave = input;
            int divisionFive = input / 5;
            int min = 10000;

            if (input % 3 == 0 && min > input / 3)
                min = input / 3;
                
            for (int i = 1; i < divisionFive + 1; i++)
            {
                input = inputSave;
                input -= 5 * i;
                if(input % 3 == 0)
                {
                    int divisionThree = input / 3;
                    if(min > i + divisionThree)
                        min = i + divisionThree;
                }
                else if(input == 0)
                {
                    if (min > i)
                        min = i;
                }
            }

            if (min == 10000)
                min = -1;

            Console.WriteLine(min);
        }

       
    }
}

18을 5로 나누면 몫이 3이 나온다. 즉 18에서는 5가 1개, 2개, 3개 일 경우가 있다. 이를 한번씩 비교해보면서 min값을 추출하는 방식이다. 

예를들어 5가 하나면 남은 13에서 3으로 안나눠 떨어지기 때문에 그런경우는 없다.

마찬가지로 5가 2개면 남은 8에서 3으로 안나눠 떨어지기 때문에 이 역시 그런경우는 없다.

만약 5가 3개면 남은 3에서 3으로 나눠 떨어지기때문에 5는 3개, 3은 1개, 총 4개이다.

그 위에 3으로 나눴을때의 min값이 6이기 때문에 min은 4가 된다.