PS/프로그래머스 입문 100제

[프로그래머스] LV.0 직사각형의 넓이 구하기 - 자바 [90/100]

yaho!! 2024. 7. 5. 23:03

💬 문제 설명

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

 

🚫 제한 사항

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

 

📢 입출력 예

 

👨‍🏫 입출력 예 설명

 

📃 제출 코드

class Solution {
    public int solution(int[][] dots) {
        int answer = 0;
        
        int max_X = Integer.MIN_VALUE;
        int min_X = Integer.MAX_VALUE;
        int max_Y = Integer.MIN_VALUE;
        int min_Y = Integer.MAX_VALUE;
        
        
        for (int i = 0; i < dots.length; i++) {
            if(max_X < dots[i][0]) {
                max_X = dots[i][0];
            }
            
            if(min_X > dots[i][0]) {
                min_X = dots[i][0];
            }
            
            if(max_Y < dots[i][1]) {
                max_Y = dots[i][1];
            }
            
            if(min_Y > dots[i][1]) {
                min_Y = dots[i][1];
            }
        }
        
        
        answer = Math.abs(max_X - min_X) * Math.abs(max_Y - min_Y);
        
        
        return answer;
    }
}

 

✏ 해결방법 & 배운점

  1. 변수 초기화:
    • max_X, min_X는 x좌표의 최대값과 최소값을 저장합니다.
    • max_Y, min_Y는 y좌표의 최대값과 최소값을 저장합니다.
    • 초기값으로 max_X와 max_Y는 가장 작은 값인 Integer.MIN_VALUE로, min_X와 min_Y는 가장 큰 값인 Integer.MAX_VALUE로 설정합니다.
  2. 좌표 순회:
    • for 루프를 사용하여 주어진 네 좌표 dots를 순회하면서 x와 y의 최대값과 최소값을 갱신합니다.
      • 현재 좌표의 x값이 max_X보다 크면 max_X를 갱신합니다.
      • 현재 좌표의 x값이 min_X보다 작으면 min_X를 갱신합니다.
      • 현재 좌표의 y값이 max_Y보다 크면 max_Y를 갱신합니다.
      • 현재 좌표의 y값이 min_Y보다 작으면 min_Y를 갱신합니다.
  3. 넓이 계산:
    • 직사각형의 넓이는 (최대 x값 - 최소 x값)과 (최대 y값 - 최소 y값)의 곱으로 구합니다.
    • Math.abs를 사용하여 양수 값을 보장합니다.
  4. 결과 반환:
    • 계산된 넓이를 answer에 저장하고 반환합니다.

예제

주어진 좌표가 [[1, 1], [2, 1], [2, 2], [1, 2]]일 경우를 예로 들어 설명하겠습니다.

  1. 초기값 설정:
    • max_X = Integer.MIN_VALUE, min_X = Integer.MAX_VALUE
    • max_Y = Integer.MIN_VALUE, min_Y = Integer.MAX_VALUE
  2. 좌표 순회 후 값 갱신:
    • 첫 번째 좌표 (1, 1) 검사 후: max_X = 1, min_X = 1, max_Y = 1, min_Y = 1
    • 두 번째 좌표 (2, 1) 검사 후: max_X = 2, min_X = 1, max_Y = 1, min_Y = 1
    • 세 번째 좌표 (2, 2) 검사 후: max_X = 2, min_X = 1, max_Y = 2, min_Y = 1
    • 네 번째 좌표 (1, 2) 검사 후: max_X = 2, min_X = 1, max_Y = 2, min_Y = 1
  3. 넓이 계산:
    • 가로 길이 = Math.abs(2 - 1) = 1
    • 세로 길이 = Math.abs(2 - 1) = 1
    • 넓이 = 1 * 1 = 1

결과적으로, 주어진 좌표로 이루어진 직사각형의 넓이는 1이 됩니다.