백준 어두운 굴다리

KIMYEONGJUN·2026년 2월 26일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫 번째 줄에 굴다리의 길이 N 이 주어진다. (1 ≤ N ≤ 100,000)
두 번째 줄에 가로등의 개수 M 이 주어진다. (1 ≤ M ≤ N)
다음 줄에 M 개의 설치할 수 있는 가로등의 위치 x 가 주어진다. (0 ≤ x ≤ N)
가로등의 위치 x는 오름차순으로 입력받으며 가로등의 위치는 중복되지 않으며, 정수이다.

굴다리의 길이 N을 모두 비추기 위한 가로등의 최소 높이를 출력한다.

내가 이 문제를 보고 생각해본 부분

입력으로 굴다리 길이 N, 가로등 개수 M, 가로등 위치 배열을 받는다.
첫 번째 가로등 위치와 길이 시작점(0)과의 거리를 계산하여 leftGap에 저장한다. 
최소 높이는 적어도 이 값 이상이어야 한다.
마지막 가로등 위치와 길이 끝점(N)과의 거리를 rightGap에 저장한다.
가로등들 사이의 거리 중 가장 긴 것을 찾아 maxMid에 저장한다. 
중간 간격을 양쪽에서 빛이 비춘다고 가정해 절반만 비추면 되므로 나누기 2를 한다.
leftGap, rightGap, maxMid/2 중 가장 큰 값이 최소 높이가 된다.
중간 간격은 정수 나눗셈 시 올림 처리를 위해 (maxMid + 1)/2로 계산한다. 
예를 들어, 간격이 3일 때 높이는 2가 되어야 충분히 빛이 닿는다.
마지막으로 결과를 출력한다.
출력 후 BufferedReader를 닫는다.

코드로 구현

package baekjoon.baekjoon_33;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

// 백준 17266번 문제
public class Main1311 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine()); // 굴다리 길이
        int M = Integer.parseInt(br.readLine()); // 가로등 개수
        int[] positions = new int[M];

        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < M; i++) {
            positions[i] = Integer.parseInt(st.nextToken());
        }

        // 1. 좌측 끝부터 가로등까지 거리
        int leftGap = positions[0] - 0;
        // 2. 우측 끝까지 거리
        int rightGap = N - positions[M-1];
        // 3. 중간 가로등 사이 최대 간격의 절반
        int maxMid = 0;
        for (int i = 0; i < M - 1; i++) {
            int gap = positions[i+1] - positions[i];
            maxMid = Math.max(maxMid, gap);
        }

        int result = Math.max(leftGap, rightGap);
        // 강제 올림을 위해 중간 간격은 (gap + 1) / 2 처리
        result = Math.max(result, (maxMid + 1) / 2);
        System.out.println(result);
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글