[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);
		}
	}
}

업데이트:

댓글남기기