BOJ. 2805

Opusdeisong·2022년 12월 29일
0

백준 Class2

목록 보기
30/31


#BOJ2805

나무 자르기

직전에 해결한 랜선 자르기와 풀이 과정 자체가 유사해서 그대로 코드를 가져다 썻다. 다만 다른 점이 있다면 나무의 높이의 합을 구해서 구분을 해줘야 한다는 점이랑 숫자의 범위가 훨씬 더 커져서 long long int로 처리를 해줘야 한다는 점이다. 그래서 한 번 틀리긴 했지만 결과적으로는 어렵지 않게 해결할 수 있었다. 실버2 문제 치고는 매우 쉽다는 생각이 들었다.

# include <iostream>
# include <algorithm>
using namespace std;

long long int N, M, max_temp = 0, l = 1, r = 0, m, ans = 0;

int main(){
   ios::sync_with_stdio(false);
   cin.tie(NULL);
   cout.tie(NULL);
   
   cin >> N >> M;
   
   long long int* arr = new long long int[N];
   for (long long int i = 0; i < N; i ++){
       cin >> arr[i];
       max_temp = max(max_temp, arr[i]);
   }
   r = max_temp;
   while (l <= r){
       long long int temp = 0;
       
       m = (l + r) / 2;

       for (long long int i = 0; i < N; i++){
           if (arr[i] > m) temp += arr[i] - m;
           }

       if (temp >= M){
           l = m + 1;
           ans = max(ans, m);
       }
       else r = m - 1;

   }
   cout << ans << "\n";

}
profile
Dorsum curvatum facit informaticum.

0개의 댓글