in.add()

[1654] 랜선 자르기 본문

Algorithm/BOJ

[1654] 랜선 자르기

idan 2021. 9. 2. 20:00

문제 링크 : https://www.acmicpc.net/problem/1654

 

1654번: 랜선 자르기

첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그

www.acmicpc.net

 

문제 해결 방법

이분 탐색으로 구현했습니다.

 

놓쳤던 부분

  1. 랜선의 길이는 231-1보다 작거나 같은 자연수이다.

int 범위를 벗어날 수 있기 때문에 long을 써줘야 합니다. 또 초기 min 값을 0이 아닌 1로 주어야 합니다.

 

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int K = sc.nextInt();
        long N = sc.nextInt();
        long[] lan = new long[K];
        long max = -1;

        for (int i = 0; i < K; i++) {
            lan[i] = sc.nextInt();
            max = Math.max(max, lan[i]);
        }

        long min = 1;

        while (min <= max) {
            long length = (max + min) / 2;
            int cnt = 0;
            for (int i = 0; i < K; i++) {
                cnt += lan[i] / length;
            }
            if (cnt >= N) min = length + 1;
            else max = length - 1;
        }

        System.out.println(max);
    }
}

'Algorithm > BOJ' 카테고리의 다른 글

[2012] 등수 매기기  (0) 2021.09.10
[3085] 사탕 게임  (0) 2021.09.09
[16236] 아기 상어  (0) 2021.09.04
[14889] 스타트와 링크  (0) 2021.09.03
[1916] 최소비용 구하기  (0) 2021.09.01
Comments