본문 바로가기
알고리즘/백준 BOJ

[ BOJ/C# ] 1654 랜선 자르기

by 왹져박사 2023. 10. 23.

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

 

1654번: 랜선 자르기

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

www.acmicpc.net

시간 관리를 위해 이분탐색을 효과적으로 사용해야 하는 문제이다. 

using System;
using System.IO;

namespace B1654
{
    class Program
    {
        static void Main()
        {
            StreamReader sr = new StreamReader(Console.OpenStandardInput());
            StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());

            //입력
            int[] kn = Array.ConvertAll(sr.ReadLine().Split(' '), int.Parse);
            int k = kn[0];
            int n = kn[1];
            long[] lans = new long[n];
            //랜선들 저장
            for(int i = 0; i < k; i++) lans[i] = int.Parse(sr.ReadLine());

            long max = lans.Max();
            long min = 1;
            long result = 0;

            //이분탐색
            while (min <= max)
            {
                long mid = (min + max) / 2;  //중간값
                long count = lans.Sum(x => x / mid);
                if (count >= n)
                {
                    //목표보다 크거나 같으면 저장하고 최대 길이 탐색
                    //result와 mid 중 더 큰 값 저장
                    result = result > mid ? result : mid;
                    min = mid + 1;
                }
                else max = mid - 1;
            }
            sw.Write(result);
            sr.Close();
            sw.Flush();
            sw.Close();
        }
    }
}

'알고리즘 > 백준 BOJ' 카테고리의 다른 글

[ BOJ/C# ] 16928 뱀과 사다리 게임  (0) 2023.10.24
[ BOJ/C# ] 1697 숨바꼭질  (0) 2023.10.24
[ BOJ/C# ] 1436 영화감독 숌  (0) 2023.10.22
[ BOJ/C# ] 1966 프린터 큐  (0) 2023.10.21
[ BOJ/C# ] 14940 쉬운 최단거리  (0) 2023.10.19