본문 바로가기
코딩테스트 준비/백준

[백준] 2166번 - 다각형의 면적 [Java]

by mwzz6 2024. 12. 2.

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

 

[백준] 2166번 - 다각형의 면적 [Java]


1.  아이디어

 

다각형의 면적은 신발끈 공식을 통해 간단하게 구할 수 있다.

오목 다각형일 경우 면적 계산이 잘못될 수 있어서 신발끈 공식이 가장 적합한 것으로 판단했다.


2. 문제풀이

 

신발끈 공식만 적용하면 바로 해결할 수 있고 계산한 값의 절반의 절댓값이 면적인 점에 주의해야 한다. 추가로 좌표의 곱을 구하는 과정에서 int형 오버플로우가 발생할 수 있는 점에 주의해야 한다.


3. 코드

 

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        int N = Integer.parseInt(br.readLine());

        // 좌표의 곱이 int형 오버플로우가 발생할 수 있음
        long[][] points = new long[1 + N][2];
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            points[i][0] = Integer.parseInt(st.nextToken());
            points[i][1] = Integer.parseInt(st.nextToken());
        }
        points[N][0] = points[0][0];
        points[N][1] = points[0][1];

        double area = 0;

        // 신발끈 공식
        for (int i = 0; i < N; i++) {
            area += points[i][0] * points[i + 1][1] - points[i][1] * points[i + 1][0];
        }

        System.out.printf("%.1f", Math.abs(area / 2));
    }
}

4. 후기