[프로그래머스] 코딩 테스트 입문 - 직사각형 넓이 구하기(Java)

수경·2022년 11월 16일
0

problem solving

목록 보기
58/174

프로그래머스 - 직사각형 넓이 구하기

문제

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

❗️제한 사항

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

입출력 예시

dotsresult
[[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
    }
}

풀이를 자세하게까진 아니더라도, 다른 사람이 읽었을 때 '이게 이 뜻이구나' 는 되게 쓰고싶었는데 지금까지 너무 모호하게 썼나 싶어서 그림을 첨부해봤다.

사실 생각보다 문제를 빨리 푼 것도 있어서 그냥 그려봤다,, 재밌으니까,, 간단하니까,,,,,
근데 사진이 너무 커서 부담스럽다

원래 이 문제는 어제 풀고싶었는데 문제를 보자마자 어떻게 풀어야할지 생각이 안나서 당황해서 에잇 내일하자 하고 미뤄둔 건데,
신기하게도 오늘 보니까 '어, 이거 이렇게 하면 되는 거 아닌가?' 하면서 바로 생각났다.
아주 좋은 방식은 아니지만, 내일 스터디를 해보면 더 좋은 방식이 있을 것 같지만! 아쉽지만 어쨌든!

그날 안풀린다고 너무 너무 오래 잡고있지 말고 쿨하게 다음날로 넘기는 것도 하나의 방식인 것 같다!(암튼임)

profile
어쩌다보니 tmi뿐인 블로그😎

0개의 댓글