개발 기록 남기기✍️

[프로그래머스] 직사각형 넓이 구하기 본문

코딩 테스트 연습

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

너해동물원 2022. 12. 30. 12:05

🗒️ 문제 설명

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

 


❇️ 나의 풀이

  • 처음에는 엥 이런걸 왜 문제 내줘? 겁나 쉬운데? 했다. 좌표가 순서대로 주어진줄 알고 (dots[0][0] - dots[1][0]) * dots[0][1] - dots[3][1]) 했다가 바로 오답... ^,^
  • 일단 sort 함수로 배열을 정렬했다. dots.sort((a,b) => a[0]-b[0]) 는 1차원 배열의 인덱스가 0인 부분을 비교해서 정렬한다. 따라서 x축 값이 작은 것들이 먼저 앞쪽에 오게 된다.
  • dots[0]과 dots[1]을 비교하면 y 값을 얻을 수 있고, dots[0]과 dots[2]를 비교하면 x 값을 얻을 수 있다.
  • 비교한 값이 음수로 나올 수도 있으므로 Math.abs()로 감싸준다. 
function solution(dots) {
    dots.sort((a,b) => a[0]-b[0]);
    return Math.abs((dots[0][1] - dots[1][1]) * (dots[0][0] - dots[2][0]))
}