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

남궁진 (jinvicky)·2026년 4월 8일

Problem


https://school.programmers.co.kr/learn/courses/30/lessons/120860

Solution


처음에는 단순하게 x1과 x2의 x축 거리의 차이와 x2와 x3의 y축 차이를 곱하면 되지 않을까 하고 코드를 작성했다. 그랬더니 샘플케이스만 통과하고 모든 테스트 케이스를 통과하지 못했다.

Point

하지만 실제로 점의 순서는 보장되지 않기 때문에 내가 사용한 두 개의 점이 직사각형의 가로/세로가 아닐 가능성이 존재한다.

그래서

  • x좌표들 중 최대 - 최소
  • y좌표들 중 최대 - 최소를 구해서 곱해야만 한다.

점이 어떤 순서로 오든 상관없이:

가장 왼쪽 ~ 가장 오른쪽 → 가로
가장 아래 ~ 가장 위 → 세로

👉 항상 직사각형 크기 정확히 나옴

결과적으로 점 3개를 고르는 것이 아니라, 전체 좌표의 범위를 봐야 한다.

Code


class Solution {
    public int solution(int[][] dots) {
        int[] x1 = dots[0];
        int[] x2 = dots[1];
        int[] x3 = dots[2];
        int[] x4 = dots[3];
        
        int minX = Math.min(x1[0], Math.min(x2[0], Math.min(x3[0], x4[0])));
        int maxX = Math.max(x1[0], Math.max(x2[0], Math.max(x3[0], x4[0])));
        
        int minY = Math.min(x1[1], Math.min(x2[1], Math.min(x3[1], x4[1])));
        int maxY = Math.max(x1[1], Math.max(x2[1], Math.max(x3[1], x4[1])));

        
        return (maxX - minX) * (maxY - minY);
    }
}
profile
문제를 차근차근 하나씩 해결하려고 합니다:)

0개의 댓글