모든 파일에 쓸 버퍼 크기 K를 하나 정해, 각 파일마다 ceil(F_i/K) 곱하기 (T+K)의 합을 최소로 만드는 K를 구한다.
어려움8수학정수론완전 탐색구현아직 제출이 없습니다시간 제한1초메모리 제한512 MB유닉스 계열 운영체제에서는 파일을 읽기 위해 read()라는 시스템 호출을 제공한다. 크기가 K바이트인 버퍼를 전달하면, read()는 그 버퍼에 파일을 읽어 들이며, 한 번 호출하는 데 걸리는 시간은 (T+K)이다. 여기서 T는 호출 한 번당 고정적으로 걸리는 시간이다. 이 수행 시간은 버퍼의 크기에만 의존하고, 실제로 읽은 바이트 수에는 의존하지 않는다. 예를 들어 버퍼 크기가 10바이트이면 3바이트를 읽든 7바이트를 읽든 항상 (T+10)의 시간이 걸린다.
크기가 F바이트인 파일 하나를 읽으려면 read()를 ⌈F/K⌉번 호출해야 한다. 크기가 F1,F2,…,FN바이트인 N개의 파일을 모두 읽는 데 걸리는 총 시간은 다음과 같다.
∑i=1N⌈Fi/K⌉×(T+K)
민규는 모든 파일에 같은 버퍼 크기 K를 사용하기로 했다. 단, K는 1 이상의 정수이다. 총 읽기 시간을 가장 짧게 만드는 버퍼 크기 K를 구하라.
첫째 줄에는 파일의 개수 N이 주어진다. 둘째 줄에는 각 파일의 크기를 나타내는 N개의 자연수 Fi가 바이트 단위로 주어진다. 셋째 줄에는 고정 호출 시간 T가 주어진다. T는 0 이상의 정수이다.
주어진 파일을 모두 읽는 데 걸리는 가장 짧은 총 시간과, 그 시간을 달성하는 버퍼 크기 K를 공백으로 구분하여 출력한다. 가장 짧은 시간이 되는 K가 여러 개라면 그중 가장 작은 값을 출력한다.
Linux는 대표적인 유닉스 계열 운영체제이다. macOS 역시 유닉스 계열이며, 그 밖에 FreeBSD, NetBSD, Solaris 등이 있다.