[SWEA] 11446. 사탕 가방
[11446. 사탕 가방]
문제
결국 가방의 수를 구해야하는 문제이다. 사탕이 한 개씩 담긴다고 가정했을 때 단일 사탕의 최대 개수가 최대 가방 수로 놓고 이분 탐색을 한다. 이때 가방에 사탕들을 나눠담았을 때 한 가방에 담긴 사탕의 수로 판별한다.
실수
계속해서 런타임 에러가 발생했다. 같은 코드를 다른 언어로 변환해서 돌려노니 pass 가 나왔다.
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
static StringBuilder result = new StringBuilder();
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
///////////////////////////
int n;
long m, left, right, mid, sum, max;
long[] A = new long[100];
///////////////////////////
for (int test_case = 1; test_case <= T; test_case++) {
result.append("#" + test_case + " ");
/////////////////////////////
st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
for (int i = 0; i < 100; i++) {
A[i] = 0;
}
st = new StringTokenizer(br.readLine());
max = 0L;
for (int i = 0; i < n; i++) {
A[i] = Long.parseLong(st.nextToken());
max = Math.max(max, A[i]);
}
left = 1L;
right = max;
while (left <= right) {
sum = 0;
mid = (left + right) / 2;
for (int i = 0; i < n; i++) {
sum += (A[i] / mid);
}
if (sum < m) {
right = mid - 1;
} else {
left = mid + 1;
}
}
result.append(right + "\n");
System.out.print(result);
result.setLength(0);
}
}
}
댓글남기기