새소식

Programmers Coding Test/Java

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

  • -

 

직사각형 넓이 구하기

 

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

1)  문제

2차원 좌표 평면에 변이 축과 평행한 직사각형이 있습니다. 
직사각형 네 꼭짓점의 좌표 [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]가 담겨있는 배열 dots가 매개변수로 주어질 때, 직사각형의 넓이를 return 하도록 solution 함수를 완성해보세요.
제한사항
dots의 길이 = 4
dots의 원소의 길이 = 2
-256 < dots[i]의 원소 < 256
잘못된 입력은 주어지지 않습니다.

 

 

 

2)  예시

 

 

Result Table
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입니다.

 

 

 

 

3)  풀이

 

 

1. 클래스 선언을 해줍니다

● class Solution {

클래스명은 대문자로 시작해야하고, 정답이라는 의미로 Solution이라는 단어를 사용하였습니다.

 

 

 

 

2. 2차원 정수배열 dots를 매개변수로 하는 solution 메소드를 선언합니다.

solution은 정수를 반환하므로 데이터타입을 int으로 합니다.

●   public int solution(int[][] dots) {

 

 

 

3. 정답이 될 answer를 생성해주고  초기화합니다.

제일 첫 시작점 startPoint를 생성해줍니다. dots의 첫번째 원소의 첫번째 요소로 지정해줍니다.

가로의 길이를 boxWidth, 세로의 길이를 boxLength로 생성하고 초기하해줍니다.

●     int answer = 0;
        int startPoint = dots[0][0];
        int boxWidth = 0;
        int boxLength = 0;

 

 

 

 

 

4. for문을이용하여 [i][0]가 startPoint와 같다면 (즉, 같은 세로 변에 위치하고 있다면) 직사각형의 세로길이를 구할 수있게됩니다.  음수인 경우를 대비하여 Math.abs를 이용하여 절댓값으로 구해줍니다.

 

그다음, startPoint와 같지 않다면 (즉, 같은 세로변에 위치하고있지 않다면) 직사각형의 가로길이를 구하도록 합니다.

최종적으로 가로와 세로 길이가 구해졌다면 두 값을 곱해 넓이를 구해주고, answer를 반환해줍니다.

 

for(int i = 1; i<dots.length; i++){
            if(dots[i][0] == startPoint){
                boxLength = Math.abs(dots[i][1] - dots[0][1]);
            }else{
                boxWidth = Math.abs(dots[i][0] - dots[0][0]);
            }
        }
        answer = boxWidth * boxLength;
        return answer;
    }
}

 

 

 

 

4)  코드

 

class Solution {
    public int solution(int[][] dots) {
        int answer = 0;
        int startPoint = dots[0][0];
        int boxWidth = 0;
        int boxLength = 0;
        for(int i = 1; i<dots.length; i++){
            if(dots[i][0] == startPoint){
                boxLength = Math.abs(dots[i][1] - dots[0][1]);
            }else{
                boxWidth = Math.abs(dots[i][0] - dots[0][0]);
            }
        }
        answer = boxWidth * boxLength;
        return answer;
    }
}

 

 

 

 

 

 

 

5)  느낀점

절대값을 이용해야했다는 점, 그리고 네변의 각 점을 비교할 때, 동일변에 위치한지 여부에 따라 가로길이를 구할지 세로길이를 구할지에 대한 생각하는데 오래 걸렸던 것 같습니다.

 

처음에 그냥 무턱대고 첫번재 요소와 두번째 요소값을 빼는 식으로 했다가 이러면 언제 동일 x변이고 언제 동일한 y변이지...하는 문제를 직면하여 다시 풀게 되었습니다.

 

 

 

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.