C# 2805번 나무 자르기

2022. 2. 24. 15:32C#/[백준]이분 탐색

문제

코드 :

using System;

namespace _4
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] N_M = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
            int N = N_M[0];
            int M = N_M[1];

            int[] wood = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);

            Array.Sort(wood);
            long start = 1;
            long end = wood[^1];
            long mid = (start + end) / 2;
            long sum = 0;


            while (start <= end)
            {
                 sum = 0;
                for (int i = 0; i < N; i++)
                {
                    if (wood[i] < mid )
                        continue;
                    sum += wood[i] - mid;
                }
                if(sum >= M)
                {
                    start = mid+1;
                    mid = (start + end) / 2;
                }
                else
                {
                    end = mid -1 ;
                    mid = (start + end) / 2;
                }
            }

            Console.WriteLine(mid);

        }
    }
}

이문제는 이분탐색으로 쉽게 풀 수 있다. 주의할 점은 sum이 int형을 초과할 수 있기 때문에 long으로 선언해주기만 하면 된다.

'C# > [백준]이분 탐색' 카테고리의 다른 글

C# 2110번 공유기 설치  (0) 2022.02.24
C# 1654번 랜선 자르기  (0) 2022.02.24
C# 10816번 숫자 카드2  (0) 2022.02.24
C# 1920번 수 찾기  (0) 2022.02.24