본문 바로가기
🫧 코테 : CodingTest

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

by 예옹이 2024. 4. 1.

 

문제

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

 

 

입출력 예

dots result
[[1, 1], [2, 1], [2, 2], [1, 2]] 1
[[-1, -1], [1, 1], [1, -1], [-1, 1]] 4

 

 


 

 

 

오늘은 두가지 코드로 문제를 풀었습니다.

 

 

 

1-1. 2차원 배열 정렬

람다를 사용해 2차원 배열을 정렬시켰습니다.

Arrays.sort(dots, (o1, o2) -> o1[0] == o2[0] ? o1[1] - o2[1] : o1[0] - o2[0]);

 

1-2. 첫번째 원소와 마지막 원소끼리 차이로 넓이 구하기

첫번째 원소와 마지막 원소가 대각선에 놓인 점들입니다.

그렇게 가로와 세로 길이를 구해 넓이를 구할 수 있습니다.

answer = (dots[3][0] - dots[0][0]) * (dots[3][1] - dots[0][1]);

 

 

 

 

 

2-1. x1, x2, y1, y2 초기화

가로(x2 - x1), 세로(y2 - y1)를 구할때 사용할 4개의 숫자를 초기화해줍니다.

int x1 = dots[0][0];
int x2 = 1;
int y1 = dots[0][1];
int y2 = 1;

 

2-2. 대각선 점 찾기

기준점(x1, y1)과 대각선에 놓인 점(x2, y2)은 x좌표값과 y좌표값이 다릅니다.

그래서 기준점과 x랑 y값이 다르다면 그 점은 대각선에 놓인 점일 겁니다.

if(dots[i][0]!=x1 && dots[i][1]!=y1)

 

2-3. 넓이 구하기

기준점과 대각선에 놓인 점의 차이로 가로 X 세로를 해줍니다.

단 값이 음수일 수 있으므로 절댓값을 씌워줍니다.

return Math.abs(x2-x1) * Math.abs(y2-y1);

 

 


 

 

 

코드

 

방법1)

import java.util.*;

class Solution {
    public int solution(int[][] dots) {
        int answer = 1;
        Arrays.sort(dots, (o1, o2) -> o1[0] == o2[0] ? o1[1] - o2[1] : o1[0] - o2[0]);
        answer = (dots[3][0] - dots[0][0]) * (dots[3][1] - dots[0][1]);
        
        return answer;
    }
}

 

 

방법2)

import java.util.*;

class Solution {
    public int solution(int[][] dots) {
        
        int x1 = dots[0][0];
        int x2 = 1;
        int y1 = dots[0][1];
        int y2 = 1;
        
        for(int i=1; i<dots.length; i++){
            if(dots[i][0]!=x1 && dots[i][1]!=y1) {
                x2 = dots[i][0];
                y2 = dots[i][1];
                break;
            }
        }
        
        return Math.abs(x2-x1) * Math.abs(y2-y1);
    }
}

 

 

 

 

 

 

제가 작성한 코드는 아래에서 확인하실 수 있습니다.

https://github.com/eonwy/programmers

 

GitHub - eonwy/programmers: 🔎 coding-test (programmers) 🔍

🔎 coding-test (programmers) 🔍. Contribute to eonwy/programmers development by creating an account on GitHub.

github.com