본문 바로가기
기초다지기/JS 코딩테스트

javaScript 2차원 직사각형의 넓이 계산하기

by 김빵그 2023. 11. 1.

문제

주어진 좌표 평면에 있는 직사각형의 넓이를 구하여라

나의 풀이 

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을 사용해 중복을 제거하고 다시 배열로 반환한다

 

 


내가 또 생각도 안하고 더러운 코드를 짜버렸구나... 생각좀 하자 !