본문 바로가기
CodingTest/Programmers

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

by yoondoo 2023. 2. 2.
728x90

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


제한사항

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

입출력 예

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

 

입출력 예 #1

  • 좌표 [[1, 1], [2, 1], [2, 2], [1, 2]] 를 꼭짓점으로 갖는 직사각형의 가로, 세로 길이는 각각 1, 1이므로 직사각형의 넓이는 1 x 1 = 1입니다.

입출력 예 #2

  • 좌표 [[-1, -1], [1, 1], [1, -1], [-1, 1]]를 꼭짓점으로 갖는 직사각형의 가로, 세로 길이는 각각 2, 2이므로 직사각형의 넓이는 2 x 2 = 4입니다.

 

class Solution {
    public int solution(int[][] dots) {
        int answer = 0;
        
        int maxH = dots[0][0];
        int minH = dots[0][0];
        int maxW = dots[0][1];
        int minW = dots[0][1];
        for(int i=1; i<dots.length; i++) {
        	maxH = Math.max(maxH, dots[i][0]);
        	minH = Math.min(minH, dots[i][0]);
        	maxW = Math.max(maxW, dots[i][1]);
        	minW = Math.min(minW, dots[i][1]);
        }
        answer = (maxH-minH)*(maxW-minW); 
        
        return answer;
    }
}

힌트를 얻어서 

가로의 (가장 큰 좌표 - 가장 작은 좌표) x 세로의 (가장 큰 좌표 - 가장 작은 좌표)를 구하면 되는 간단한 문제였다.

 

처음에 헷갈렸던 부분이 좌표 - 좌표를 할 때, 양수-양수, 음수-음수, 양수 - 음수 이 세가지 경우를 다 나눠서 구해야한다고 생각했는데 결국 Integer클래스의 메서드를 이용해서 (가장 큰 값 - 가장 작은 값)을 하면 위의 세가지 경우에 다 부합하는 길이가 나온다.

반응형

댓글