코테 준비/Java [백준] #6236. 용돈 관리 (실버 2) - https://www.acmicpc.net/problem/6236 1. 이진탐색 대상 → 출력값인 최소 인출 금액 2. 최소인출금액을 구하려는데 그에 대한 기본 low와 high값은? (인출 횟수 상관없이!) low : 입력받은 값들 중 가장 큰 값 high : 모든 입력값들 더한 값 3. 인출횟수는 어떻게 고려? ㄴ mid값을 인출금액으로 했을 때 인출이 몇번 필요한지 계산해본 후 인출해야하는 횟수보다 mid값을 사용해 계산해본 인출횟수가 많으면 : 인출을 더 많이 해야하는 것이기 때문에 인출금액이 지금보다 더 커져야 함 → low = mid + 1 적으면(같으면) : 인출횟수가 덜 필요한 것이기 때문에 인출금액을 지금보다 줄여야 함 → high = mid - 1(주어진 인출금액으로 모든 과정을 처리할 수 있는 경우 현재 크기가 가능한 최소 인출횟수라고 간주 → minMoney = mid) import java.io.*;import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int n = Integer.parseInt(st.nextToken()); int m = Integer.parseInt(st.nextToken()); int[] money = new int[n]; int min = 0; int sum = 0; for (int i = 0; i < n; i++) { money[i] = Integer.parseInt(br.readLine()); min = Math.max(min, money[i]); sum += money[i]; } int low = min; int high = sum; int minMoney = 0; while (low <= high) { int mid = (low+high) / 2; int num = 1; int total = mid; for (int mon : money) { if (total < mon) { num++; total = mid; } total -= mon; } if (num > m) { low = mid + 1; } else { minMoney = mid; high = mid - 1; } } System.out.println(minMoney); }} 공유하기 URL 복사카카오톡 공유페이스북 공유엑스 공유 게시글 관리 구독하기피할 수 없다면 즐기는 자가 일류 Contents 당신이 좋아할만한 콘텐츠 [백준] #2110. 공유기 설치 (골드 4) 2024.06.02 [백준] #1654. 랜선 자르기 (실버 2) 2024.06.02 [백준] #2343. 기타 레슨 (실버 1) 2024.06.02 [백준] #19637. if문 좀 대신 써줘 (실버 3) 2024.06.01 댓글 0 + 이전 댓글 더보기