728x90
인프런의 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의를 수강하며 풀이 코드를 정리하고 있습니다.
풀이
- 결정 알고리즘(이진 탐색)을 사용하여 최소 용량을 탐색한다.
package inflearn.sorting_searching;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
//뮤직비디오(결정 알고리즘)
public class Main6_9 {
//capacity 용량을 받아 dvd를 만들면 몇장으로 만들어지는지를 반환하는 메서드
public static int count(int[] arr, int capacity) {
int count = 1;
int sum = 0;
for (int i : arr) {
if (sum + i > capacity) {
count++;
sum = i;
} else {
sum += i;
}
}
return count;
}
public static int solution(int n, int m, int[] arr) {
int answer = 0;
int left = Arrays.stream(arr).max().getAsInt();
int right = Arrays.stream(arr).sum();
//결정 알고리즘(이진 탐색)으로 최소 용량 크기를 찾는다.
while (left <= right) {
int mid = (left + right) / 2;
if (count(arr, mid) <= m) {
answer = mid;
right = mid-1;
} else {
left = mid+1;
}
}
return answer;
}
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[] arr = new int[n];
st = new StringTokenizer(br.readLine());
for (int i = 0; st.hasMoreTokens(); i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
System.out.println(solution(n, m , arr));
}
}
'알고리즘 문제풀이 > 인프런' 카테고리의 다른 글
[알고리즘] 7-1 재귀함수 (인프런 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의) (0) | 2021.06.13 |
---|---|
[알고리즘] 6-8 이분 검색(이진 탐색, Binary Search) - 인프런 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의 (0) | 2021.06.12 |
[알고리즘] 6-7 좌표 정렬(인프런 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의) (0) | 2021.06.09 |
[알고리즘] 6-5 중복 확인(인프런 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의) (0) | 2021.06.08 |
[알고리즘] 6-4 LRU(캐시, 카카오 변형)(인프런 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의) (0) | 2021.06.08 |
댓글