
내가 생각했을때 문제에서 원하는부분
2차원 좌표 평면에 변이 축과 평행한 직사각형이 있습니다.
직사각형 네 꼭짓점의 좌표 [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]가 담겨있는 배열 dots가 매개변수로 주어질 때, 직사각형의 넓이를 return 하도록 solution 함수를 완성해보세요.
내가 이 문제를 보고 생각해본 부분
인텔리제이 환경에서 코드를 직접 실행하고 테스트할 수 있도록 만든 실행 진입점이다.
Main162 객체를 생성한 뒤, 문제에 나오는 예시 데이터를 solution 메서드에 전달하고 결과를 콘솔에 출력한다.
배열의 첫 번째 점(dots[0])의 x좌표와 y좌표를 최소값과 최대값의 기준으로 먼저 잡는다.
이후 반복문을 돌며 다른 점들과 비교하기 위한 초기 세팅 작업이다.
두 번째 점부터 마지막 점까지 차례대로 확인한다.
Math.min은 기존 값과 새로운 값 중 더 작은 것을 골라 저장하고, Math.max는 더 큰 것을 골라 저장한다.
이 과정을 거치면 4개의 점 중 가장 작은 x값과 가장 큰 x값, 가장 작은 y값과 가장 큰 y값을 정확하게 찾는다.
가장 큰 x좌표에서 가장 작은 x좌표를 빼서 직사각형의 가로 길이를 구한다.
가장 큰 y좌표에서 가장 작은 y좌표를 빼서 직사각형의 세로 길이를 구한다.
마지막으로 가로와 세로를 곱한 최종 넓이 값을 반환한다.
코드로 구현
class Solution {
public int solution(int[][] dots) {
int minX = dots[0][0];
int maxX = dots[0][0];
int minY = dots[0][1];
int maxY = dots[0][1];
for (int i = 1; i < dots.length; i++) {
minX = Math.min(minX, dots[i][0]);
maxX = Math.max(maxX, dots[i][0]);
minY = Math.min(minY, dots[i][1]);
maxY = Math.max(maxY, dots[i][1]);
}
int width = maxX - minX;
int height = maxY - minY;
return width * height;
}
}
프로그래머스 코드
package programmers.programmers2;
// 프로그래머스 직사각형 넓이 구하기
public class Main162 {
public static void main(String[] args) {
Main162 T = new Main162();
// 테스트 케이스 1
int[][] dots1 = {{1, 1}, {2, 1}, {2, 2}, {1, 2}};
System.out.println(T.solution(dots1)); // 출력: 1
// 테스트 케이스 2
int[][] dots2 = {{-1, -1}, {1, 1}, {1, -1}, {-1, 1}};
System.out.println(T.solution(dots2)); // 출력: 4
}
public int solution(int[][] dots) {
int minX = dots[0][0];
int maxX = dots[0][0];
int minY = dots[0][1];
int maxY = dots[0][1];
for (int i = 1; i < dots.length; i++) {
minX = Math.min(minX, dots[i][0]);
maxX = Math.max(maxX, dots[i][0]);
minY = Math.min(minY, dots[i][1]);
maxY = Math.max(maxY, dots[i][1]);
}
int width = maxX - minX;
int height = maxY - minY;
return width * height;
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.