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

 

 

#include<stdio.h>

long long k;
long long Lan[20000];   //원소는 초기화 됨. 

long long div(long long len)   //len로 자르기. 
{
   long long sum = 0;
   
   for(int i=0; i<k; i++)
   {
      sum += (Lan[i]/len);
   }
   
   return sum;
}

int main(void)
{   
   long long n;
   long long max = 0;
   scanf("%lld %lld", &k, &n);
   
   for(int i=0; i<k; i++)
   {
      scanf("%lld", &Lan[i]);
      
      if(max<Lan[i])
      {
         max = Lan[i];   //최대 원소값 찾기 
      }
   }
   
   long long s = 1;
   long long e = max;   //mid의 범위를 1~최대 원소값까지로 고정. 
   long long mid;
   long long res; 
   long long res2 = -1; 

   
   while(s<=e)
   {
      mid = (s+e)/2;
      
      res = div(mid);   //res는 조각의 개수. 
      //
      if(res >= n)
      {
        if(res2 < mid) {
          res2 = mid;
        }
         s=mid+1;
      }
      
      else
      {
         e=mid-1;
      }
   }
   
   printf("%lld\n", res2);
   
   return 0;
}

+ Recent posts