[標準/Java]251予算
条件
場所の数はN個です.(3 <= N <= 10,000)
各地方の予算要求はN個ある.(1<=予算<=10000)
総予算を出す.(最大10億円)
入力例
解説
この問題は二分探索によって解決でき,予算を要求する値に最大の値を加える範囲である.各地方で要求される予算値は総予算より低いため、範囲の最大値は予算値の中で最大になります.次に、予算全体を探索し、中間値vs要求予算に低い値を加えてsum値が予算全体を超えたかどうかを決定する.
コード#コード#
import java.io.*;
import java.util.*;
public class Main {
static int N,M;
static int[] A;
static FastReader scan = new FastReader();
static StringBuilder sb = new StringBuilder();
static void input() {
N = scan.nextInt(); // 지방의 수를 받는다.
A = new int[N + 1]; // index를 1부터 시작하기 위해 +1을 해준다.
for(int i=1;i<=N;i++) {
A[i] = scan.nextInt(); // 지방이 요청하는 예산을 받는다.
}
M = scan.nextInt(); //총 예산을 받는다.
}
static boolean findAns(int buget) {
int sum = 0;
for(int i=1;i<=N;i++) {
sum += Math.min(A[i],buget); // 요청 예산과 mid을 비교하여 더 낮은 값을 //넣어주고 sum을 해 총 예산보다 작다면 true를 반환한다.
}
return sum <= M;
}
static void find() {
int ans =0, L =0, R = 0;
for(int i =1;i<=N;i++) {
R = Math.max(R, A[i]); // 탐색 범위의 최대값은 요청 예산에서 제일 큰값으로 해주 // 다
}
while(L <= R) {
int mid = (L + R) / 2;
if(findAns(mid)) {
ans = mid; //true이면 ans에 mid값을 넣고
L = mid + 1; // 범위를 줄여준다.
} else {
R = mid - 1;
}
}
System.out.println(ans);
}
public static void main(String[] args) {
input();
find();
}
static class FastReader{
BufferedReader br;
StringTokenizer st;
public FastReader() {
br = new BufferedReader(new InputStreamReader(System.in));
}
public FastReader(String s) throws FileNotFoundException {
br = new BufferedReader(new FileReader(new File(s)));
}
String next() {
while(st == null || !st.hasMoreElements()) {
try {
st = new StringTokenizer(br.readLine());
} catch(IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
Long nextLong() {
return Long.parseLong(next());
}
double nextDouble(){
return Double.parseDouble(next());
}
String nextLine() {
String str = "";
try {
str = br.readLine();
}catch(IOException e) {
e.printStackTrace();
}
return str;
}
}
}
Reference
この問題について([標準/Java]251予算), 我々は、より多くの情報をここで見つけました https://velog.io/@heetaeheo/백준Java-2512-예산テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol