728x90
반응형
직사각형 넓이 구하기
문제설명 :
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번과 1번 좌표를 가져와 너비를 구하고, 0번과 3번의 좌표를 가져와 높이를 구해 곱해주었다. 하지만 최종 제출은 0점...?
function solution(dots) {
let width = dots[1][0] - dots[0][0];
let height = dots[3][1] - dots[0][1]
return width * height;
}
두번째 접근
: 왜 일까...? 혹시나 해서 '[[-5, 2], [0, 2], [0, -1], [-5, -1]]'의 테스트 케이스를 추가하니, return 값이 음수나 나왔다. 그래서 Math.abs()를 사용했다. 하지만 역시 최종 제출은 0점....ㅜ
function solution(dots) {
let width = dots[1][0] - dots[0][0];
let height = dots[3][1] - dots[0][1]
return Math.abs(width * height);
}
세번째 접근
: 이번에도 예시의 함정에 빠졌다. 문제 어느 곳에서도 좌표가 시계방향으로 제공된다는 말이 없다. 즉, 좌표가 섞여서 제공될 수 있다는 것이다. 해당 부분을 고려하려 x와 y의 좌표값을 각각 구해 max값에서 min값을 빼 w와 h값을 구했다. 최종 통과가 되었다.
function solution(dots) {
let widths = dots.map(el => el[0])
let heigths = dots.map(el => el[1])
let width = Math.max(...widths) - Math.min(...widths)
let height = Math.max(...heigths) - Math.min(...heigths)
return width * height
}
solution
const solution = dots => {
const x = [...new Set(dots.map(p => p[0]))]
const y = [...new Set(dots.map(p => p[1]))]
return Math.abs((x[0] - x[1]) * (y[0] - y[1]))
}
// Set을 사용하면 x와 y는 각각 2개의 값을 갖게 된다.
728x90
반응형
'자료구조 및 알고리즘 > JavaScript Practice' 카테고리의 다른 글
JS Practice) 프로그래머스 : 치킨 쿠폰 (0) | 2023.04.10 |
---|---|
JS Practice) 프로그래머스 : 로그인 성공? (0) | 2023.04.07 |
JS Practice) 프로그래머스 : 종이 자르기 (0) | 2023.04.05 |
JS Practice) 프로그래머스 : 캐릭터의 좌표 (0) | 2023.04.04 |
JS Practice) 프로그래머스 : 외계어 사전 (0) | 2023.04.03 |