C# 2805번 나무 자르기
2022. 2. 24. 15:32ㆍ코딩테스트 문제 풀이/[백준]이분 탐색
728x90
반응형
코드 :
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으로 선언해주기만 하면 된다.
728x90
반응형
'코딩테스트 문제 풀이 > [백준]이분 탐색' 카테고리의 다른 글
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 |