baekjoon

백준 2166번 : 다각형의 면적 [자바]

Meluu_ 2025. 4. 25. 20:45

 

 

 

🧫 문제 분석

✔️ 출처

다각형의 면적 골드 5

 

📖 문제

 

신발끈 공식 이라는 특이한 다각형 면적 구하는 공식이 있다.

문제에서 다각형을 이루는 순서대로 N개의 점 좌표가 주어진다하였으므로 그대로 신발끈 공식을 적용한다. 

 

계산을 할때 long 형으로 받아야하는 점, 출력을 소수점 둘째 자리에서 반올림하여야하는 점을 고려하면된다.

String.format을 사용해서 %.1f 를 사용하면 내부적으로 둘째자리까지 반올림해서 문자열을 만들어준다. 


🔅 문제 풀이

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class Main {
	// 문제에서 순서대로 좌표를 준다하였음
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        // 신발끈 정리
        long[] a = new long[n + 1];
        long[] b = new long[n + 1];
        
        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            a[i] = Long.parseLong(st.nextToken());
            b[i] = Long.parseLong(st.nextToken());
        }

        // 처음 정점을 또 추가
        a[a.length - 1] = a[0];
        b[b.length - 1] = b[0];

        double area = (double) Math.abs(multiply(n, a, b) - multiply(n, b, a)) / 2;
        System.out.println(String.format("%.1f", area));
    }


    private static long multiply(int n, long[] a, long[] b) {
        long sum = 0;
        for (int i = 0; i < n; i++) {
            sum += a[i + 1] * b[i];
        }
        return sum;
    }
}

 

 

 

❗ 오답노트 / 필요한 지식

  1.