-
<이분탐색> 백준 2512 예산알고리즘 2023. 5. 30. 14:52
문제
https://www.acmicpc.net/problem/2512
2512번: 예산
첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상
www.acmicpc.net
풀이
이분탐색을 사용해서 풀이
출력값인 배정된 예산들 중 최댓값인 정수는 상한가(mid)가 된다.
import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); int[] arr = new int[n]; StringTokenizer st = new StringTokenizer(br.readLine()); for(int i=0; i<n; i++) { arr[i]= Integer.parseInt(st.nextToken()); } Arrays.sort(arr); int left=0; int right=arr[n-1]; int m = Integer.parseInt(br.readLine()); int answer=0; while(left<=right) { int mid = (left+right)/2; int total=0; for(int i=0; i<n; i++) { if(mid<arr[i]) { total+=mid; } else { total += arr[i]; } } if(total<=m) { answer = Math.max(answer, mid); left=mid+1; }else { right=mid-1; } } System.out.println(answer); } }
'알고리즘' 카테고리의 다른 글
[java] 백준 좌표정렬하기2 (0) 2023.06.09 [java] 백준 4963 섬의 개수 (1) 2023.06.09 <dp> 프로그래머스 멀리 뛰기 (0) 2023.05.27 <문자열> 프로그래머스 lv.1 숫자 문자열과 영단어 (0) 2023.05.27 [java] 백준 9205 : 맥주 마시면서 걸어가기 (1) 2023.05.24