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 |
입출력 예시 2번의 경우, 각 좌표를 A, B, C, D 라고 할 때 아래와 같이 나타낼 수 있음.
직사각형의 넓이 = 밑변 * 높이
❗️A와 C는 x좌표가 다르고, y좌표가 같음 ➡️ x 좌표의 차이로 밑변 width를 구할 수 있음
❗️B와 C는 x좌표가 같고, y좌표가 다름 ➡️ y 좌표의 차이로 높이 height를 구할 수 있음
➡️ 밑변 width = C의 x좌표 - A의 x좌표
= | A의 x좌표 - C의 x좌표 |
➡️ 높이 height = B의 y좌표 - C의 y좌표
= | C의 y좌표 - B의 y좌표 |
public class RectangleArea {
public int solution(int[][] dots) {
int x, y;
int width = 0, height = 0;
// 기준 좌표
x = dots[0][0];
y = dots[0][1];
for (int i = 1; i < 4; i++) {
// x와 dots의 x 좌표가 다르면 width를 구할 수 있음
if (x != dots[i][0]) width = Math.abs(x - dots[i][0]);
// y와 dots의 y 좌표가 다르면 height를 구할 수 있음
if (y != dots[i][1]) height = Math.abs(y - dots[i][1]);
}
return width * height;
}
public static void main(String[] args) {
RectangleArea rectangleArea = new RectangleArea();
System.out.println(rectangleArea.solution(new int[][]{{1, 1}, {2, 1}, {2, 2}, {1, 2}})); // 1
System.out.println(rectangleArea.solution(new int[][]{{-1, 1}, {1, 1}, {1, -1}, {-1, 1}})); // 4
}
}
풀이를 자세하게까진 아니더라도, 다른 사람이 읽었을 때 '이게 이 뜻이구나' 는 되게 쓰고싶었는데 지금까지 너무 모호하게 썼나 싶어서 그림을 첨부해봤다.
사실 생각보다 문제를 빨리 푼 것도 있어서 그냥 그려봤다,, 재밌으니까,, 간단하니까,,,,,
근데 사진이 너무 커서 부담스럽다
원래 이 문제는 어제 풀고싶었는데 문제를 보자마자 어떻게 풀어야할지 생각이 안나서 당황해서 에잇 내일하자 하고 미뤄둔 건데,
신기하게도 오늘 보니까 '어, 이거 이렇게 하면 되는 거 아닌가?' 하면서 바로 생각났다.
아주 좋은 방식은 아니지만, 내일 스터디를 해보면 더 좋은 방식이 있을 것 같지만! 아쉽지만 어쨌든!
그날 안풀린다고 너무 너무 오래 잡고있지 말고 쿨하게 다음날로 넘기는 것도 하나의 방식인 것 같다!(암튼임)