
https://school.programmers.co.kr/learn/courses/30/lessons/120860
처음에는 단순하게 x1과 x2의 x축 거리의 차이와 x2와 x3의 y축 차이를 곱하면 되지 않을까 하고 코드를 작성했다. 그랬더니 샘플케이스만 통과하고 모든 테스트 케이스를 통과하지 못했다.
하지만 실제로 점의 순서는 보장되지 않기 때문에 내가 사용한 두 개의 점이 직사각형의 가로/세로가 아닐 가능성이 존재한다.
그래서
최대 - 최소최대 - 최소를 구해서 곱해야만 한다. 점이 어떤 순서로 오든 상관없이:
가장 왼쪽 ~ 가장 오른쪽 → 가로
가장 아래 ~ 가장 위 → 세로
👉 항상 직사각형 크기 정확히 나옴
결과적으로 점 3개를 고르는 것이 아니라, 전체 좌표의 범위를 봐야 한다.
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);
}
}