
내가 생각했을때 문제에서 원하는부분
첫 번째 줄에 건설하고자 하는 건물의 수 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();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.