백준 풀이/자바(Java)

백준 2477 자바 - 참외밭

콘스_ 2024. 9. 8. 11:07
// 참외밭
package Silver_II_2;

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

public class Ex2477 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int k = Integer.parseInt(br.readLine()); // 1m^2 당 자라는 참외의 개수

        int[][] arr = new int[6][2];

        // 입력
        for (int i = 0; i < 6; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());

            // 동쪽은 1, 서쪽은 2, 남쪽은 3, 북쪽은 4
            int direction = Integer.parseInt(st.nextToken()); // 방향
            int length = Integer.parseInt(st.nextToken()); // 길이

            arr[i][0] = direction;
            arr[i][1] = length;
        }

        // 가장 긴 가로, 세로 계산 및 각각 마지막 순서 저장
        int currentHorizontal = 0, maxHorizontal = 0; // 가로
        int currentVertical = 0, maxVertical = 0; // 세로

        for (int i = 0; i < 6; i++) {
            if (arr[i][0] == 1 || arr[i][0] == 2) {
                if (maxHorizontal < arr[i][1]) {
                    maxHorizontal = arr[i][1];
                    currentHorizontal = i;
                }
            } else if (arr[i][0] == 3 || arr[i][0] == 4) {
                if (maxVertical < arr[i][1]) {
                    maxVertical = arr[i][1];
                    currentVertical = i;
                }
            }
        }

        // 빈 사각형의 가로, 세로 구하기
        int emptyHorizontal = 0, emptyVertical = 0;

        if (currentHorizontal == 0) {
            emptyHorizontal = Math.abs(arr[5][1] - arr[1][1]);
        } else if (currentHorizontal == 5) {
            emptyHorizontal = Math.abs(arr[4][1] - arr[0][1]);
        } else {
            emptyHorizontal = Math.abs(arr[currentHorizontal + 1][1] - arr[currentHorizontal - 1][1]);
        }

        if (currentVertical == 0) {
            emptyVertical = Math.abs(arr[5][1] - arr[1][1]);
        } else if (currentVertical == 5) {
            emptyVertical = Math.abs(arr[4][1] - arr[0][1]);
        } else {
            emptyVertical = Math.abs(arr[currentVertical + 1][1] - arr[currentVertical - 1][1]);
        }

        // 결과 계산
        int result = (maxHorizontal * maxVertical - emptyHorizontal * emptyVertical) * k;

        System.out.println(result);
    }
}

 

가장 큰 사각형과에서 빈 사각형의 넓이를 빼는 방식으로 했다.

빈 사각형의 가로, 세로는 가장 큰 사각형의 가로, 세로에 각각 수직으로 있는 선들의 차를 구하면 된다.