코딩테스트

BOJ : 1654

joonwoong 2024. 6. 3. 17:06

1. 문제

 

2. 문제 설명 및 알고리즘 설계

랜선을 자를 개수가 주어지고 그 개수만큼 자를때 최대 길이를 찾는 문제이다.

 

자를때 한 조각의 길이로 이분 탐색하면 된다.

 

3. 코드

package week9;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Q1654_boj {
    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());
        int arr[] = new int[K];

        long max=0;
        long min=0;

        for(int i=0;i<K;i++){
            arr[i] = Integer.parseInt(br.readLine());
            if(max < arr[i]) {
                max = arr[i];
            }
        }

        max++;

        long middle = 0;

        while (min < max) {
            middle = (max + min) / 2;
            long count = 0;

            for (int i = 0; i < arr.length; i++) {
                count += (arr[i] / middle);
            }
            if(count < N) {
                max = middle;
            }
            else {
                min = middle + 1;
            }
        }
        System.out.println(min - 1);
    }
}

 

4. 시간 복잡도

O(logN)

 

5. 결과

'코딩테스트' 카테고리의 다른 글

BOJ : 20444  (1) 2024.06.06
BOJ : 11687  (0) 2024.06.06
BOJ : 10815  (3) 2024.06.02
BOJ : 4158  (0) 2024.05.31
BOJ : 3020  (0) 2024.05.29