문제
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
'🫧 코테 : CodingTest' 카테고리의 다른 글
| [프로그래머스] Java : 안전지대 (1) | 2024.04.02 |
|---|---|
| [프로그래머스] Java : 다항식 더하기 (0) | 2024.04.02 |
| [프로그래머스] Java : 잘라서 배열로 저장하기(substring) (1) | 2024.03.28 |
| [프로그래머스] Java : 숫자 찾기(ASCII) (1) | 2024.03.22 |
| [프로그래머스] Java : 문자열 계산하기 (0) | 2024.03.20 |