Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

forDevLife

[백준] 1654 - 랜선 자르기 본문

알고리즘

[백준] 1654 - 랜선 자르기

JH_Lucid 2021. 6. 18. 00:33

앞서 푼 이진탐색이랑 완전히 동일한 문제이다.

다만 start를 0으로 두면 이후에 divide by 0 예외가 뜨므로, 문제 조건대로 꼭 1로 설정을 해두자(자연수)

예외는 입력으로 K = 2, N = 2, 1, 1을 넣을 때 발생했다. start가 처음에 0이면, mid 값이 0이 되므로 에러가 발생한다. 유의하자.

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int K = Integer.parseInt(st.nextToken());
        int N = Integer.parseInt(st.nextToken());

        long[] lengths = new long[K];

        long max = 0;
        for(int i=0; i<K; i++) {
            lengths[i] = Long.parseLong(br.readLine());
            max = Math.max(max, lengths[i]);
        }

        long start = 1;
        long end = max;

        while(start <= end) {
            long mid = (start + end) / 2;
            int sum = 0;
            for(long x : lengths) {
                if(x >= mid) {
                    sum += x / mid;
                }
            }
            if(sum >= N) {
                start = mid + 1;
            } else
                end = mid - 1;
        }
        System.out.println(end);
    }
}

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

[백준] 1874 - 스택수열  (0) 2021.06.18
[백준] 1929 - 소수 구하기  (0) 2021.06.18
[백준] 2805 - 나무 자르기  (0) 2021.06.17
[백준] 18111 - 마인크래프트  (0) 2021.06.17
[백준] 11866 - 요세푸스 문제 0  (0) 2021.06.17
Comments