링크 → https://www.acmicpc.net/problem/2343
아영
package Baekjoon.java.silver;
import java.io.*;
import java.util.*;
public class boj2343 {
public static void main(String[] args) throws Exception{
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());
st = new StringTokenizer(br.readLine());
int[] video = new int[N];
for (int i = 0; i < N; i++) {
video[i] = Integer.parseInt(st.nextToken());
}
int right = Arrays.stream(video).sum();
int left = 1;
int mid = 0;
int answer = 0;
while(left<=right){
int cnt = 0;
int sum =0;
mid = (right+left)/2;
for(int i=0;i<N;i++){
if(mid<video[i]){
cnt = M+1;
break;
}
sum += video[i];
if(cnt>M) break;
if(sum>mid){
cnt +=1;
sum = video[i];
}else if(sum==mid){
cnt +=1;
sum = 0;
}
}
if(sum>0) cnt+=1;
if(cnt>M){
left = mid+1;
}else{
right = mid-1;
answer = mid;
}
}
System.out.println(answer);
}
}
은영
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class baekjoon2343 {
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 blue[] = new int[N];
st = new StringTokenizer(br.readLine()+" ");
int start=0;
int end = 0;
for (int i = 0; i < N; i++) {
blue[i] = Integer.parseInt(st.nextToken());
end+=blue[i];
start = Math.max(start, blue[i]);
}
while(start<=end) {
int mid = (start+end)/2;
int sum=0;
int cnt=0;
for (int i = 0; i < N; i++) {
if(sum+blue[i]>mid) {
sum=0;
cnt++;
}
sum+=blue[i];
}
if(sum!=0)cnt++;
if(cnt<=M) end = mid-1;
else start = mid+1;
}
System.out.println(start);
}
}
건
용문
// MARK: - BJ2343 Guitar Lesson
class BJ2343 {
private var N: Int = 0
private var M: Int = 0
private var answer: Int = 0
private var lessons: [Int] = []
public func solve() {
readComponents()
calc()
printAnswer()
}
private func readComponents() {
let temp = readLine()!.split(separator: " ").map { Int($0)! }
self.N = temp[0]
self.M = temp[1]
self.lessons = readLine()!.split(separator: " ").map{ Int($0)! }
}
private func calc() {
var left = lessons.last!
var right = 0
var mid = 0
for lesson in lessons {
right += lesson
}
while left <= right {
mid = (left + right) / 2
var count = 0
var time = 0
for lesson in lessons {
if time + lesson > mid {
count += 1
time = 0
}
time += lesson
}
count += 1
if count <= M {
right = mid - 1
} else {
left = mid + 1
}
}
self.answer = left
}
private func printAnswer() {
print(answer)
}
}
BJ2343().solve()