저장을 습관화

프로그래머스 LV.0 직사각형 넓이 구하기 본문

코딩 테스트/프로그래머스 - 자바스크립트

프로그래머스 LV.0 직사각형 넓이 구하기

ctrs 2023. 10. 3. 18:08

프로그래머스 LV.0 직사각형 넓이 구하기

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

 

프로그래머스

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

programmers.co.kr

 

1. 문제 명

직사각형 넓이 구하기


2. 문제 설명

2차원 좌표 평면에 변이 축과 평행한 직사각형이 있습니다. 직사각형 네 꼭짓점의 좌표 [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]가 담겨있는 배열 dots가 매개변수로 주어질 때, 직사각형의 넓이를 return 하도록 solution 함수를 완성해보세요.


3. 제한 사항

- dots의 길이 = 4
- dots의 원소의 길이 = 2
- -256 < dots[i]의 원소 < 256
- 잘못된 입력은 주어지지 않습니다.


4. 예시

dots result
[[1, 1], [2, 1], [2, 2], [1, 2]] 1
[[-1, -1], [1, 1], [1, -1], [-1, 1]] 4


5. 기본 제공 코드

function solution(dots) {
    var answer = 0;
    return answer;
}


6. 제출한 내 답

const solution = (dots) => {
  let horizontalPoint = dots.map((v) => v[0]);
  let verticalPoint = dots.map((v) => v[1]);

  let widthStart = Math.min(...horizontalPoint);
  let widthEnd = Math.max(...horizontalPoint);

  let lengthStart = Math.min(...verticalPoint);
  let lengthEnd = Math.max(...verticalPoint);

  let width =
    widthStart < 0 ? Math.abs(widthStart - widthEnd) : widthEnd - widthStart;

  let length =
    lengthStart < 0
      ? Math.abs(lengthStart - lengthEnd)
      : lengthEnd - lengthStart;

  return width * length;
};
정확성  테스트
테스트 1 〉	통과 (0.06ms, 33.6MB)
테스트 2 〉	통과 (0.06ms, 33.5MB)
테스트 3 〉	통과 (0.06ms, 33.6MB)
테스트 4 〉	통과 (0.06ms, 33.5MB)
테스트 5 〉	통과 (0.06ms, 33.6MB)
채점 결과
정확성: 100.0
합계: 100.0 / 100.0

 

6-2. VSC에 작성한 내용

const solution = (dots) => {
  let horizontalPoint = dots.map((v) => v[0]);
  let verticalPoint = dots.map((v) => v[1]);

  let widthStart = Math.min(...horizontalPoint);
  let widthEnd = Math.max(...horizontalPoint);

  let lengthStart = Math.min(...verticalPoint);
  let lengthEnd = Math.max(...verticalPoint);

  let width =
    widthStart < 0 ? Math.abs(widthStart - widthEnd) : widthEnd - widthStart;

  let length =
    lengthStart < 0
      ? Math.abs(lengthStart - lengthEnd)
      : lengthEnd - lengthStart;

  return width * length;
};

// 테스트
console.log(
  solution([
    [1, 1],
    [2, 1],
    [2, 2],
    [1, 2],
  ])
);
console.log(
  solution([
    [-1, -1],
    [1, 1],
    [1, -1],
    [-1, 1],
  ])
);


7. 특이사항

에바인가


8. 다른 사람이 작성한 답

8-1. 가장 많이 쓰인 풀이법, 좋아요를 가장 많이 받은 풀이법

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))
}