From 59d03dd061a9cea8fc27001fbbb6ab88188199fb Mon Sep 17 00:00:00 2001 From: suyeun84 <81475092+suyeun84@users.noreply.github.com> Date: Fri, 24 Oct 2025 23:47:26 +0900 Subject: [PATCH] =?UTF-8?q?[20251024]=20BOJ=20/=20G1=20/=20=ED=86=B5?= =?UTF-8?q?=EB=82=98=EB=AC=B4=20=EC=9E=90=EB=A5=B4=EA=B8=B0=20/=20?= =?UTF-8?q?=EA=B9=80=EC=88=98=EC=97=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4 \354\236\220\353\245\264\352\270\260.md" | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 "suyeun84/202510/24 BOJ G1 \355\206\265\353\202\230\353\254\264 \354\236\220\353\245\264\352\270\260.md" diff --git "a/suyeun84/202510/24 BOJ G1 \355\206\265\353\202\230\353\254\264 \354\236\220\353\245\264\352\270\260.md" "b/suyeun84/202510/24 BOJ G1 \355\206\265\353\202\230\353\254\264 \354\236\220\353\245\264\352\270\260.md" new file mode 100644 index 00000000..cdcc199f --- /dev/null +++ "b/suyeun84/202510/24 BOJ G1 \355\206\265\353\202\230\353\254\264 \354\236\220\353\245\264\352\270\260.md" @@ -0,0 +1,64 @@ +```java +import java.io.*; +import java.util.*; + +public class boj1114 { + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + static StringTokenizer st; + static void nextLine() throws Exception {st = new StringTokenizer(br.readLine());} + static int nextInt() {return Integer.parseInt(st.nextToken());} + + static int L, K, C; + static int[] pos; + static int ansLen, ansPos = -1, firstCut; + public static void main(String[] args) throws Exception { + nextLine(); + L = nextInt(); // 통나무 길이 + K = nextInt(); // 위치 개수 + C = nextInt(); // 자를 수 있는 최대 횟수 + // 통나무의 가장 긴 조각을 작게 만들고, 그 길이 구하기 + nextLine(); + pos = new int[K+2]; + pos[0] = 0; + pos[K+1] = L; + for (int i = 1; i <= K; i++) pos[i] = nextInt(); + Arrays.sort(pos); + + // 가장 긴 조각의 길이, 그 때 처음 자르는 위치 + int start = 1, end = L; + ansLen = L; + while (start <= end) { + int mid = (start + end) / 2; + int cnt = calc(mid); + + if (cnt <= C) { + ansLen = mid; + ansPos = firstCut; + end = mid - 1; + } else { + start = mid + 1; + } + } + System.out.println(ansLen + " " + ansPos); + } + + static int calc(int mid) { + int dist = 0, cnt = 0; + for (int i = K; i >= 0; i--) { + dist += pos[i+1] - pos[i]; + if (dist > mid) { + dist = (pos[i+1] - pos[i]); + cnt++; + if (dist > mid) { + cnt = C+1; + break; + } + } + } + if (cnt < C) firstCut = pos[1]; + else firstCut = dist; + + return cnt; + } +} +```