백준 울타리 공사

KIMYEONGJUN·2026년 4월 15일
post-thumbnail

문제

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

첫 번째 줄에 건설하고자 하는 건물의 수 N이 주어진다.

두 번째 줄부터 N개의 줄에 걸쳐 건물의 정보가 주어진다. 그중
i번째 줄에는 i번째로 지을 건물의 a_i, b_i, c_i, d_i가 공백으로 구분되어 주어진다.

N개 줄에 걸쳐 각 울타리 공사에 드는 비용을 출력한다.
그중 i번째 줄에는 i번째로 지을 건물을 건설했을 때의 울타리 공사 비용을 출력한다.

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

입력 처리
첫 줄에서 건물 수 N을 읽는다.
다음 N줄은 각 건물의 좌표 (a_i,b_i,c_i,d_i)를 읽어 buildings 배열에 저장한다.
울타리 범위 계산 반복
i번째 for 루프는 0부터 N−1까지 진행하면서, i+1번째 건물까지 포함한 울타리 범위를 계산한다.
각 단계에서 minX, minY, maxX, maxY를 초기화하여 현재까지 지어진 건물들의 최소 x, 최소 y, 최대 x, 최대 y 값들을 찾는다.
건물 좌표 비교
내부 for 루프는 0부터 i까지의 건물들을 순회하며, 각각의 좌표를 비교하여 최소값 및 최대값을 갱신한다.
울타리 비용 계산 및 출력
둘레 공식인 2×((maxX−minX)+(maxY−minY))로 울타리 비용을 계산해 출력한다.

코드로 구현

package baekjoon.baekjoon_34;

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

// 백준 32171번 문제
public class Main1359 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        // 건물 좌표를 저장할 배열
        int[][] buildings = new int[N][4];

        // 입력받기
        for (int i = 0; i < N; i++) {
            String[] input = br.readLine().split(" ");
            for (int j = 0; j < 4; j++) {
                buildings[i][j] = Integer.parseInt(input[j]);
            }
        }

        // 건물이 하나씩 지어질 때마다 울타리 비용 출력
        for (int i = 0; i < N; i++) {
            int minX = Integer.MAX_VALUE;
            int minY = Integer.MAX_VALUE;
            int maxX = Integer.MIN_VALUE;
            int maxY = Integer.MIN_VALUE;

            // 현재까지 지은 건물들 범위 판단
            for (int j = 0; j <= i; j++) {
                if (buildings[j][0] < minX) minX = buildings[j][0];
                if (buildings[j][1] < minY) minY = buildings[j][1];
                if (buildings[j][2] > maxX) maxX = buildings[j][2];
                if (buildings[j][3] > maxY) maxY = buildings[j][3];
            }

            // 둘레 계산
            int perimeter = 2 * ((maxX - minX) + (maxY - minY));
            System.out.println(perimeter);
        }

        br.close();
    }
}

마무리

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

profile
Junior backend developer

0개의 댓글