(백준 알고리즘 문제풀이) 1654번 랜선 자르기
by 줌코딩
문제
어떻게 접근할 것인가
- 이것은 랜선 개수를 N개까지 나눠주는 최댓값을 찾아주는 문제이다.
- 즉, 랜선 개수가 N개인 upper_bound를 찾아주면 된다!
주의할 점
- type은 long long을 사용하자!
코드
#include <cstdio>
long long n, m, l = 1, r, mid, cnt, ans, arr[10001];
int main(){
    scanf("%lld %lld", &n, &m);
    for(int i = 0; i < n; i++){
        scanf("%lld", &arr[i]);
        if(arr[i] > r) r = arr[i];
    }
    while(l <= r){
        mid = (l + r) / 2;
        cnt = 0;
        for(int i = 0; i < n; i++)cnt += arr[i] / mid;
        if(cnt >= m){
            ans = ans < mid ? mid : ans;
            l = mid + 1;
        }
        else r = mid - 1;
    }
    printf("%lld", ans);
}
느낀점
- 와우… 진짜 이제 이분탐색을 잡아가는 것 같아 매우 만족스럽다…!!ㅎㅎㅎ
    이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
  
Subscribe via RSS
