N각형의 꼭지점 좌표 N개가 주어질 때, 이 다각형의 면적
단 한 줄 밖에 없는 문제 내용을 읽고 나서,
몇 분 동안은 '이걸 어떻게 풀어?'라는 생각밖에 안들었다
세 점의 좌표가 있을 때 삼각형 넓이 구하는 공식이 있지 않을까 검색해보니,
신발끈 공식이라는 생각보다 간단한 공식을 발견할 수 있었고,
기하 알고리즘의 하나로 CCW라는 것을 알게 되었다
너무 오랜만에 본 벡터라 처음에 접근하기 힘들었지만,
관련 지식이 있다면 너무 쉬운 문제일수도
/**
* @param {string[]} input stdin, 3<= N <=10,000
* @returns 다각형의 면적, 소수점 둘째 자리에서 반올림
*/
const solution = (input) => {
const [N, ...dots] = input;
const points = dots.map((d) => d.split(" ").map(Number));
const [startX, startY] = points[0];
const getTri = (a, b) => {
const [ax, ay] = a;
const [bx, by] = b;
return (ax - startX) * (by - startY) - (ay - startY) * (bx - startX);
};
let ans = 0;
for (let i = 2; i < N; i++) {
ans += getTri(points[i], points[i - 1]);
}
return (Math.abs(ans) * 0.5).toFixed(1);
};
const input = require("fs").readFileSync("/dev/stdin").toString().split("\n");
console.log(solution(input));