본문 바로가기
알고리즘/백준 BOJ

[ BOJ/C# ] 2805 나무 자르기

by 왹져박사 2023. 10. 7.
728x90

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

 

2805번: 나무 자르기

첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보

www.acmicpc.net

처음엔 이중 반복문으로 풀어 테스트케이스들은 맞았지만, 시간초과가 떴다. 

이분탐색을 어떻게 잡아야 할지 감이 안 와 다른 답들을 보며 공부하였다. 

반복문과 내용 자체는 비슷했지만 이렇게 표현할 수 있구나를 알 수 있었다. 

나중에 다시 한번 풀어봐야겠다!!

using System;
using System.IO;

namespace B2805
{
    class Program
    {
        static void Main()
        {
            StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
            StreamWriter sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));

            int[] nm = Array.ConvertAll(sr.ReadLine().Split(' '), int.Parse);
            int n = nm[0];
            int m = nm[1];
            int[] trees = Array.ConvertAll(sr.ReadLine().Split(' '), int.Parse);
            int start = 0;
            int end = trees.Max();

            while (start <= end)
            {
                int mid = (start + end) / 2;
                long wood = 0;
                foreach(int tree in trees) if (tree > mid) wood += tree - mid;
                if (wood >= m) start = mid + 1;
                else end = mid - 1;
            }
            sw.Write(end);
            sr.Close();
            sw.Flush();
            sw.Close();
        }
    }
}

 

이제 Class3이다..!

728x90

'알고리즘 > 백준 BOJ' 카테고리의 다른 글

[ BOJ/C# ] 1012 유기농 배추  (0) 2023.10.09
[ BOJ/C# ] 7568 덩치  (0) 2023.10.09
[ BOJ/C# ] 2579 계단 오르기  (0) 2023.10.07
[ BOJ/C# ] 9375 패션왕 신해빈  (0) 2023.10.05
[ BOJ/C# ] 11659 구간 합 구하기 4  (0) 2023.10.04