Competition/Baekjoon

[백준] 1654번 랜선 자르기

bisi 2020. 3. 24. 18:29
문제 출처 

https://www.acmicpc.net/problem/1654

 

1654번: 랜선 자르기

첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 후 K줄에 걸쳐 이미 가지고 있는 각 랜선의 길이가 센티미터 단위의 정수로 입력된다. 랜선의 길이는 231-1보다 작거나 같은 자연수이다.

www.acmicpc.net

 

 

 

접근 방식 및 풀이

-  1~k 배열의 가장 큰 값의 중간값으로 가장 큰 랜선의 길이를 찾아간다. 

- 코드는 아래 블로그에서 참고했다.

https://ukyonge.tistory.com/25

 

#백준_1654 랜선 자르기 - Java

# 분류 : 이진 탐색 # 최대 랜선 길이를 찾는 것이므로, count가 조건과 같다고 return 하여 문제를 접근하였으나 틀렸고 Count를 맞춰도 최대 길이를 찾아야 하기 때문에 추가적으로 left = Middle + 1 로 주어..

ukyonge.tistory.com

 

 

 

 

소스 코드 
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int k = sc.nextInt();
        int n = sc.nextInt();
        long[] arr = new long[k];
        long max = 0;

        for (int i = 0; i <k ; i++) {
            arr[i] = sc.nextLong();
            max = Math.max(max, arr[i]);
        }

        long start =1;
        long end =max;

        while (start<=end){
            long count =0;

            long mid = (start+end)/2;

            for (int i = 0; i <k ; i++) {
                count += arr[i]/mid;
            }
            if(count < n){
                end=mid-1;
            }else{
                start=mid+1;
            }
        }
        System.out.println(end);
    }
}

 

 

 

 

결과 

 

'Competition > Baekjoon' 카테고리의 다른 글

[백준] 2146번 다리만들기  (0) 2020.03.25
[백준] 10451번 순열사이클  (0) 2020.03.24
[백준] 2261번 자바  (0) 2020.03.23