언젠가는 펼쳐 볼 아카이브

[BOJ] 9063번 - 대지 본문

IT/Baekjoon Oline Judge

[BOJ] 9063번 - 대지

개발자희망생고롸파덕 2023. 9. 11. 17:16

사용언어 : javascript - node.js

 

 

#문제

#접근방법

최소 크기의 직사각형 넓이를 구해야한다.

처음엔 입력값의 좌표들이 담긴 사각형의 좌표를 하나하나 구해야 하나 했었는데, 생각해보니 그냥 그 좌표들을 가지고 사각형을 그려서 가로/세로 넓이를 구하면 될 것 같다.

 

그렇다면 점의 개수가 1개 일때는 넓이를 구할 수 없으므로 결과 값을 0으로 해주고, 점의 개수가 1개 이상일 때의 가로/세로 길이를 구해보자..!

 

* 가로 길이 : x 좌표에서 제일 큰 값 - x 좌표에서 제일 작은 값

* 세로 길이 : y 좌표에서 제일 큰 값 - y 좌표에서 제일 작은 값

 

위와 같으므로 입력한 x좌표들과 y 좌표들을 내림차순으로 sort 한 후 길이를 계산해주자.

내림차순으로 정렬한 후 뺄셈을 했지만 혹시 모르는 차원에서 Math.abs()까지 해줬다

 

#제출코드

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
const input = fs.readFileSync(filePath).toString().trim().split('\n');

const num = +input.shift();
let arr = [];

input.forEach((dots) => {
  arr.push(dots.split(' ').map((item) => +item));
});

solution(num, arr);

function solution(num, arr) {
  if (num === 1) {
    console.log(0);
    return;
  }
  let answer = 0;
  let xPoints = [];
  let yPoints = [];

  for (let i = 0; i < num; i++) {
    xPoints[i] = arr[i][0];
    yPoints[i] = arr[i][1];
  }

  xPoints.sort((a, b) => b - a);
  yPoints.sort((a, b) => b - a);

  answer =
    Math.abs(xPoints[0] - xPoints[num - 1]) *
    Math.abs(yPoints[0] - yPoints[num - 1]);

  console.log(answer);
}