프로그래머스 직사각형 넓이 구하기

KIMYEONGJUN·2026년 10월 4일
post-thumbnail

문제

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

2차원 좌표 평면에 변이 축과 평행한 직사각형이 있습니다.
직사각형 네 꼭짓점의 좌표 [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]가 담겨있는 배열 dots가 매개변수로 주어질 때, 직사각형의 넓이를 return 하도록 solution 함수를 완성해보세요.

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

인텔리제이 환경에서 코드를 직접 실행하고 테스트할 수 있도록 만든 실행 진입점이다.
Main162 객체를 생성한 뒤, 문제에 나오는 예시 데이터를 solution 메서드에 전달하고 결과를 콘솔에 출력한다.
배열의 첫 번째 점(dots[0])의 x좌표와 y좌표를 최소값과 최대값의 기준으로 먼저 잡는다.
이후 반복문을 돌며 다른 점들과 비교하기 위한 초기 세팅 작업이다.
두 번째 점부터 마지막 점까지 차례대로 확인한다.
Math.min은 기존 값과 새로운 값 중 더 작은 것을 골라 저장하고, Math.max는 더 큰 것을 골라 저장한다.
이 과정을 거치면 4개의 점 중 가장 작은 x값과 가장 큰 x값, 가장 작은 y값과 가장 큰 y값을 정확하게 찾는다.
가장 큰 x좌표에서 가장 작은 x좌표를 빼서 직사각형의 가로 길이를 구한다.
가장 큰 y좌표에서 가장 작은 y좌표를 빼서 직사각형의 세로 길이를 구한다.
마지막으로 가로와 세로를 곱한 최종 넓이 값을 반환한다.

코드로 구현

class Solution {
    public int solution(int[][] dots) {
        int minX = dots[0][0];
        int maxX = dots[0][0];
        int minY = dots[0][1];
        int maxY = dots[0][1];

        for (int i = 1; i < dots.length; i++) {
            minX = Math.min(minX, dots[i][0]);
            maxX = Math.max(maxX, dots[i][0]);
            minY = Math.min(minY, dots[i][1]);
            maxY = Math.max(maxY, dots[i][1]);
        }

        int width = maxX - minX;
        int height = maxY - minY;

        return width * height;
    }
}

프로그래머스 코드

package programmers.programmers2;

// 프로그래머스 직사각형 넓이 구하기
public class Main162 {
    public static void main(String[] args) {
        Main162 T = new Main162();

        // 테스트 케이스 1
        int[][] dots1 = {{1, 1}, {2, 1}, {2, 2}, {1, 2}};
        System.out.println(T.solution(dots1)); // 출력: 1

        // 테스트 케이스 2
        int[][] dots2 = {{-1, -1}, {1, 1}, {1, -1}, {-1, 1}};
        System.out.println(T.solution(dots2)); // 출력: 4
    }

    public int solution(int[][] dots) {
        int minX = dots[0][0];
        int maxX = dots[0][0];
        int minY = dots[0][1];
        int maxY = dots[0][1];

        for (int i = 1; i < dots.length; i++) {
            minX = Math.min(minX, dots[i][0]);
            maxX = Math.max(maxX, dots[i][0]);
            minY = Math.min(minY, dots[i][1]);
            maxY = Math.max(maxY, dots[i][1]);
        }

        int width = maxX - minX;
        int height = maxY - minY;

        return width * height;
    }
}

위에 있는 코드를 변경한 코드

마무리

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

profile
Junior backend developer

0개의 댓글