https://www.acmicpc.net/problem/2805
처음엔 이중 반복문으로 풀어 테스트케이스들은 맞았지만, 시간초과가 떴다.
이분탐색을 어떻게 잡아야 할지 감이 안 와 다른 답들을 보며 공부하였다.
반복문과 내용 자체는 비슷했지만 이렇게 표현할 수 있구나를 알 수 있었다.
나중에 다시 한번 풀어봐야겠다!!
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이다..!
'알고리즘 > 백준 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 |