728x90
반응형
SMALL

문제 설명

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


제한사항

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

입출력 예

dots result

[[1, 1], [2, 1], [2, 2], [1, 2]] 1
[[-1, -1], [1, 1], [1, -1], [-1, 1]] 4

입출력 예 설명

입출력 예 #1

  • 좌표 [[1, 1], [2, 1], [2, 2], [1, 2]] 를 꼭짓점으로 갖는 직사각형의 가로, 세로 길이는 각각 1, 1이므로 직사각형의 넓이는 1 x 1 = 1입니다.

입출력 예 #2

  • 좌표 [[-1, -1], [1, 1], [1, -1], [-1, 1]]를 꼭짓점으로 갖는 직사각형의 가로, 세로 길이는 각각 2, 2이므로 직사각형의 넓이는 2 x 2 = 4입니다.

https://school.programmers.co.kr/learn/courses/30/lessons/120860


직사각형을 구성하는 점 → {x좌표, y좌표} 으로 표현됨

x * y

x의 길이와 y의 길이를 구해야하는데 각 변의 길이는 각 좌표의 큰값에서 가장 작은 값을 빼서 구하기 → 1차 시도

Math.*abs = 주어진 숫자에 절대값 반환 → 직사각형의 넓이에 음수가 들어가면 안되기 때문에 사용*

if(x != dots[i][0]) = Math.abs(x - dots[i][0]); 
                     ^
return answer;

에러 발생 : 절대값을 구하는 메서드 앞에 임의의 값 선언 필요!

return answer; → answer을 선언하지 않아 쓸 수 없음

  • x, y 임의의 값이 두개가 필요할거 같음
if(x != dots[i][0]) = Math.abs(x - dots[i][0]); 
                     ^

x * a 를 넣어주기 않았기 때문…ㅠ

int x = dots[0][0]; => dots[i][0]
int y = dots[0][1]; => dots[i][1]

테스트는 성공했는데, 제출 때 실패…!

class Solution {
    public int solution(int[][] dots) {
        int a = 0;
        int b = 0;
        int x = dots[0][0];
        int y = dots[0][1];
        for(int i = 1; i< dots.length; i++) {
            if(x != dots[i][0]) a  = Math.abs(x - dots[i][0]);
            if(y != dots[i][0]) b = Math.abs(y - dots[i][0]);
        }
        return a * b;
    }
}

최대값 최소값으로 구해보기

x중에서 가장 큰값 - x중에서 가장 작은 값 * y중에서 가장 큰값 - y중에서 가장 작은 값

x중에서 가장 큰값 - x중에서 가장 작은 값 => x의 길이

y중에서 가장 큰값 - y중에서 가장 작은 값 => y의 길이

class Solution {
    public int solution(int[][] dots) {
        int a = 0;
        int b = 0;
        for(int i = 1; i< dots.length; i++) {
            int x = Math.max(sizes[i][0], size[i][1]);
            int y = Math.min(sizes[i][0], size[i][1]);
        }
        a = Math.max(a, x);
        b = Math.min(b, y);
        
        return a * b;
    }
}

정답

class Solution {
    public int solution(int[][] dots) {
        int minX = 256;
        int minY = 256;
        int maxX = -256;
        int maxY = -256;

        for(int i = 0; i < dots.length; i++){
            if(dots[i][0] < minX){
                minX = dots[i][0];
            }
            if(dots[i][1] < minY){
                minY = dots[i][1];
            }
        }

        for(int i = 0; i < dots.length; i++){
            if(dots[i][0] > minX){
                maxX = dots[i][0];
            }
            if(dots[i][1] > minY){
                maxY = dots[i][1];
            }
        }

        return (maxX - minX) * (maxY - minY);

    }
}
728x90
반응형
LIST

'알고리즘 > 프로그래머스 JAVA LV.0' 카테고리의 다른 글

저주의 숫자 3  (0) 2023.03.12
연속된 수의 합  (0) 2023.03.11
숫자 찾기  (0) 2023.02.26
문자열 정렬하기(2)  (0) 2023.02.25
OX퀴즈  (0) 2023.02.23

+ Recent posts