본문 바로가기

Algorithm/문제

[백준 / JAVA] 2166. 다각형의 면적(G5)

https://www.acmicpc.net/problem/2166

 

https://ggaebap.tistory.com/140

 

[JAVA] 신발끈 공식

좌표평면상의 좌표로 구성된 다각형의 면적을 구하는 공식이다. 좌표값이 다갹형을 구성하는 시계 또는 반시계 방향으로 주어져야 사용 가능하고 변이 교차하는 경우는 사용할 수 없어 쓰임새

ggaebap.tistory.com

 

너 이 공식 알아? 모르면 틀려야지를 시전하는 내가 싫어하는 유형의 문제이다. 

 

 

import java.io.*;
import java.util.*;

public class Main {
    static BufferedReader br;
    static StringTokenizer st;
    static StringBuilder sb;

    public static void main(String[] args) throws Exception {
        br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        Point[] pArr = new Point[n];
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            pArr[i] = new Point(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
        }
        System.out.printf("%.1f", shoelace(pArr));
    }

    static double shoelace(Point[] pArr) { // 신발끈 공식
        double sum1 = 0;
        double sum2 = 0;
        for (int i = 0; i < pArr.length; i++) {
            if (i == pArr.length - 1) {
                sum1 += pArr[i].x * pArr[0].y;
                sum2 += pArr[i].y * pArr[0].x;
                continue;
            }
            sum1 += pArr[i].x * pArr[i + 1].y;
            sum2 += pArr[i].y * pArr[i + 1].x;
        }
        return Math.abs(sum1 - sum2) / 2;
    }

    static class Point {
        Double x, y;

        public Point(double x, double y) {
            this.x = x;
            this.y = y;
        }
    }
}