(1회차 시도 실패)
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));
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];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int left = 1;
int right = 1000000000;
long ans = 0;
while(left <= right){
int mid = (left + right) / 2;
long sum = 0;
long count = 0;
for (int i = 0; i < n; i++) {
if(sum + arr[i] > mid){
count++;
sum = 0;
}
sum += arr[i];
}
if(count < m){
right = mid - 1;
ans = mid;
}else{
left = mid + 1;
}
}
bw.write(ans+"");
br.close();
bw.close();
}
}
(2,3,4회차 시도 실패)
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));
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 left = 1;
int right = 1;
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
left = Math.min(left, arr[i]);
right += arr[i];
}
long ans = 0;
while(left <= right){
int mid = (left + right) / 2;
long sum = 0;
long count = 0;
for (int i = 0; i < n; i++) {
if(sum + arr[i] > mid){
count++;
sum = 0;
}
sum += arr[i];
}
if(count < m){
right = mid - 1;
ans = mid;
}else{
left = mid + 1;
}
}
bw.write(ans+"");
br.close();
bw.close();
}
}
(2~4회차 시도 실패는 비슷해서 4회차만 가져왔다)
(5회차 시도 성공)
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));
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];
long left = 1;
long right = 1;
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
left = Math.max(left, arr[i]);
right += arr[i];
}
long ans = 0;
while(left <= right){
long mid = (left + right) / 2;
long sum = 0;
long count = 0;
for (int i = 0; i < n; i++) {
if(sum + arr[i] > mid){
count++;
sum = 0;
}
sum += arr[i];
}
if(count < m){
right = mid - 1;
ans = mid;
}else{
left = mid + 1;
}
}
bw.write(ans+"");
br.close();
bw.close();
}
}