프로그래머스/Lv. 0(코딩테스트 입문)

[프로그래머스 코딩테스트] 직사각형 넓이 구하기(Java)

Sigfriede 2023. 6. 10. 01:00

  문제 설명

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

 

  제한사항

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

 

  입출력 예

dots result
[[1, 1], [2, 1], [2, 2], [1, 2]] 1
[[-1, -1], [1, 1], [1, -1], [-1, 1]] 4
class Solution {
    public int solution(int[][] dots) {
        int answer = 0;
        int maxX = Integer.MIN_VALUE;
        int maxY = Integer.MIN_VALUE;
        int minX = Integer.MAX_VALUE;
        int minY = Integer.MAX_VALUE;
        for (int i = 0; i < dots.length; i++) {
            if (maxX < dots[i][0]) {
                maxX = dots[i][0];
            }
            if (maxY < dots[i][1]) {
                maxY = dots[i][1];
            }
            if (minX > dots[i][0]) {
                minX = dots[i][0];
            }
            if (minY > dots[i][1]) {
                minY = dots[i][1];
            }
        }
        int x = maxX - minX;
        int y = maxY - minY;
        answer = x * y;
        return answer;
    }
}

  변수 maxX, maxY, minX, minY를 생성합니다. 각각 X에서 큰 값, Y에서 큰 값, X에서 작은 값, Y에서 작은 값을 담을 변수입니다. 각각 변수를 갱신해나가면서 값을 할당할 것이기 때문에 Integer 클래스의 메소드를 이용했습니다. 문제에서는 제한사항에 원소를 -256부터 256까지 범위로 지정했기 때문에 이 두 수로 지정해도 됩니다. 그러나 보편적인 상황에서는 메소드를 이용하는 것이 편리할 것으로 보입니다.

  for문이 dots의 길이만큼 순회합니다.

  첫 번째 if문에서 maxX가 dots[i][0]번째 원소보다 크다면 maxX를 dots[i][0]번째 원소로 갱신합니다.

  두 번째 if문에서 maxY가 dots[i][1]번째 원소보다 크다면 maxY를 dots[i][1]번째 원소로 갱신합니다.

  첫 번째 if문에서 minX가 dots[i][0]번째 원소보다 작다면 minX를 dots[i][0]번째 원소로 갱신합니다.

  첫 번째 if문에서 minY가 dots[i][1]번째 원소보다 작다면 minY를 dots[i][1]번째 원소로 갱신합니다.

  위 과정을 거쳐 모든 변수의 값이 조건에 해당하는 값으로 갱신됩니다.

  변수 x, 즉 x의 길이는 maxX에서 minX를 뺀 값입니다. 변수 y, 즉 y의 길이는 maxY에서 minY를 뺀 값입니다.

  사각형의 넓이는 가로 * 세로이므로 x와 y를 곱하여 answer에 할당합니다.