알고리즘/BOJ

백준 2805번 나무 자르기

꾸준함. 2018. 11. 7. 01:33

문제 링크입니다: https://www.acmicpc.net/problem/2805


백준 1654번 랜선 자르기(http://jaimemin.tistory.com/964)와 매우 유사한 문제였습니다.


#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

 

const int MAX = 1000000;

 

int N;

long long M;

long long tree[MAX];

 

bool possible(long long height)

{

        long long len = 0;

        //나무를 잘라본다

        for (int i = 0; i < N; i++)

                 if (tree[i] - height > 0)

                         len += tree[i] - height;

       

        //조건 충족

        if (len >= M)

                 return true;

        return false;

}

 

int main(void)

{

        ios_base::sync_with_stdio(0);

        cin.tie(0);

        cin >> N >> M;

 

        long long low = 1, high = 0;

        for (int i = 0; i < N; i++)

        {

                 cin >> tree[i];

 

                 high = max(high, tree[i]);

        }

 

        long long result = 0;

        while (low <= high)

        {

                 long long mid = (low + high) / 2;

                 if (possible(mid))

                 {

                         result = max(result, mid);

                         low = mid + 1;

                 }

                 else

                         high = mid - 1;

        }

        cout << result << "\n";

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

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

백준 9324번 진짜 메시지  (0) 2018.11.07
백준 2110번 공유기 설치  (2) 2018.11.07
백준 1654번 랜선 자르기  (0) 2018.11.07
백준 3054번 피터팬 프레임  (0) 2018.11.06
백준 1546번 평균  (0) 2018.11.06