문제
주어진 좌표 평면에 있는 직사각형의 넓이를 구하여라
나의 풀이
function solution(dots) {
var minDot0 = dots[0][0];
var maxDot0 = dots[0][0];
var minDot1 = dots[0][1];
var maxDot1 = dots[0][1];
for (let i = 0; i < dots.length; i++) {
const [dot0, dot1] = dots[i];
minDot0 = Math.min(minDot0, dot0);
maxDot0 = Math.max(maxDot0, dot0);
minDot1 = Math.min(minDot1, dot1);
maxDot1 = Math.max(maxDot1, dot1);
}
return (maxDot0 - minDot0) * (maxDot1 - minDot1);
}
- 각 좌표 minDot0, maxDot0, minDot1, maxDot1 변수를 초기과 한다 이 변수들은 각각 직사각형의 x축과 y축에 대한 최솟값과 최대값을 추적한다
- 반복문 for를 사용해 배열의 요소를 확인한다
- 구조분해할당을 사용하여 dot0과 dot1 변수에 각 꼭지점 x와 y 좌표를 할당한다
- 각 축에 대한 최소값과 최대값을 업데이트한다
- 직사각형 넓이를 계산한다
다른 풀이
function solution(dots) {
let x = [],
y = [];
for (let pos of dots) {
x.push(pos[0]);
y.push(pos[1]);
}
return (Math.max(...x) - Math.min(...x)) * (Math.max(...y) - Math.min(...y))
}
- x와 y 빈 배열을 초기화 한다
- for ..of를 사용하여 dots 배열을 반복한다
- max를 사용해 x 좌표의 최대값을 찾고 min을 사용하여 최솟값을 찾는다
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]))
}
////
function solution(dots) {
const x = dots.map(n => n[0]);
const y = dots.map(n => n[1]);
return (Math.max(...x) - Math.min(...x)) * (Math.max(...y) - Math.min(...y))
}
- 중복 제거를 위해 new Set을 사용해 중복을 제거하고 다시 배열로 반환한다
내가 또 생각도 안하고 더러운 코드를 짜버렸구나... 생각좀 하자 !
'기초다지기 > JS 코딩테스트' 카테고리의 다른 글
javascript 배열 조합 문제 (1) | 2023.11.02 |
---|---|
javaScript 좌표 배열 경로 이동 (0) | 2023.11.01 |
javascript 문자열 s가 1이 될때까지 이진변환 반복하기 (0) | 2023.10.31 |
javascript n x n 크기의 정사각형 배열로 확대하기 (0) | 2023.10.30 |
javascript 괄호 일치 문제 해결하기 ("(){}[]") (0) | 2023.10.28 |