[BOJ] 1654 랜선 자르기
Algorithm 2023. 1. 25. 13:37https://www.acmicpc.net/problem/1654
1654번: 랜선 자르기
첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그
www.acmicpc.net
long
정수 숫자 형식 - C# 참조
각 정수 숫자 형식에 대한 범위, 스토리지 크기 및 용도에 대해 알아봅니다.
learn.microsoft.com
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace _2461
{
class Program
{
static void Main(string[] args)
{
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]; //필요한 랜선의 개수
int[] arr = new int[k];
long max = 0;
for (int i = 0; i < k; i++)
{
arr[i] = int.Parse(sr.ReadLine());
}
max = arr.Max();
//sw.WriteLine("max: {0}", max);
long min = 1;
long mid = 0;
long ans = 0;
while (min <= max)
{
//범위내 중간 길이를 구한다
mid = (min + max) / 2;
long cnt = 0;
//구해진 중간 길이로 잘라서 총 몇개가 만들어지는지 구한다
for (int i = 0; i < k; i++)
{
cnt += arr[i] / mid;
}
//sw.WriteLine("cnt: {0}, n: {1}", cnt, n);
//sw.WriteLine("min: {0}, mid: {1}, max: {2}", min, mid, max);
if (cnt < n)
max = mid - 1;
else
{
if (ans < mid)
ans = mid;
min = mid + 1;
}
}
sw.WriteLine(ans);
sr.Close();
sw.Close();
}
}
}
'Algorithm' 카테고리의 다른 글
[BOJ/C#] 10250 ACM 호텔 (0) | 2023.01.26 |
---|---|
[BOJ] 10989 수 정렬하기 3 (0) | 2023.01.26 |
[BOJ] 1920 수 찾기 (0) | 2023.01.25 |
[BOJ] 1343 폴리오미노 (0) | 2023.01.24 |
C#으로 구현한 우선순위 큐 Priority Queue (0) | 2023.01.24 |