본문 바로가기
Problem Solving/Baekjoon

[백준] 6236 용돈 관리 - BinarySearch / Java

by graycode 2023. 6. 15.

 문제 링크

 

6236번: 용돈 관리

현우는 용돈을 효율적으로 활용하기 위해 계획을 짜기로 하였다. 현우는 앞으로 N일 동안 자신이 사용할 금액을 계산하였고, 돈을 펑펑 쓰지 않기 위해 정확히 M번만 통장에서 돈을 빼서 쓰기로

www.acmicpc.net

 

 풀이 과정

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        int[] arr = new int[n];
        int low = 0, high = 1000000000;

        while (n-- > 0)
            low = Math.max(low, arr[n] = Integer.parseInt(br.readLine()));

        while (low <= high) {
            int mid = (low + high) / 2;

            int sub = mid, cnt = 1;
            for (int i : arr) {
                if (i > sub) {
                    sub = mid;
                    cnt++;
                }
                sub -= i;
            }

            if (cnt > m) low = mid + 1;
            else high = mid - 1;
        }

        bw.write(String.valueOf((low)));
        bw.flush();
    }

}

댓글