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

·2022년 12월 28일
0

프로그래머스

목록 보기
4/59

📌 문제 설명

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

📌 제한 사항

  • dots 의 길이 = 4
  • dots 의 원소의 길이 = 2
  • -256 < dots[i] 의 원소 < 256
  • 잘못된 입력은 주어지지 않습니다.

📌 입출력 예

dotsresult
[[1, 1], [2, 1], [2, 2], [1, 2]]1
[[-1, -1], [1, 1], [1, -1], [-1, 1]]4

📌 코드

import java.util.Arrays;

class Solution {
    public int solution(int[][] dots) {
         int answer = 0;
         Arrays.sort(dots, (o1, o2) -> {
            if(o1[0] == o2[0])
                return Integer.compare(o1[1], o2[1]);
            else return Integer.compare(o1[0], o2[0]);
        });
      
       answer 
       = Math.abs(dots[0][1] - dots[3][1]) 
       	* Math.abs(dots[0][0] - dots[3][0]);
        
        return answer;
    }
}

📌 문제 해결 과정

그림까지 그려 보면서 풀었던 문제였지만, 생각한 것보다 잘 안 풀리고 테스트 케이스 2번에서 자꾸 오류가 나서 고생을 좀 한 것 같다 😂

💡 이 문제에서 가장 중요한 것은 가장 큰 x 값, 가장 큰 y 값, 가장 작은 x 값, 가장 작은 y 값을 구하는 게 관건인 것 같다

  • x의 길이 = 가장 큰 x 값 - 가장 작은 x 값
  • y의 길이 = 가장 큰 y 값 - 가장 작은 y 값

💡 max, min 변수 생성해 가면서 제일 크고 제일 작은 값을 구하려고 해 봤지만 자꾸 2번 케이스에서 오류가 나서 x 값들과 y 값들을 정렬해서 사용하기로 하였다 1차원 배열이었으면 Arrays.sort() 써서 바로 정렬했을 텐데, 2차원 배열이라 학기 중 과제였던 텀프로젝트를 할 때 알게 되었던 Comparator를 사용하였다

💡 정렬 기준은 만약 비교하는 x 값들이 같다면 if(o1[0] == o2[0]) y 값들을 비교해 오름차순으로 정렬이 되고, 만약 x 값들이 같지 않다면 x 값들끼리 비교해 오름차순으로 정렬이 되게 하였다

💡 정렬이 끝나면 배열의 맨 처음에는 가장 작은 x, y 값이 있을 것이고, 배열 끝에는 가장 큰 x, y 값이 있을 것이기 때문에 그것들끼리 빼 주고 절댓값을 씌워 준 후 넓이를 구하기 위해 곱해 주면 된다

profile
공부는 많은 양을 하진 않더라도 꾸준히 매일 하기

0개의 댓글