[백준] 2166 - 다각형의 면적 (java)

HaYeong Jang·2021년 1월 13일
0

[백준] 알고리즘

목록 보기
2/62
post-thumbnail

문제

2차원 평면상에 N(3 ≤ N ≤ 10,000)개의 점으로 이루어진 다각형이 있다. 이 다각형의 면적을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다. 좌표값은 절댓값이 100,000을 넘지 않는 정수이다.

출력

첫째 줄에 면적을 출력한다. 면적을 출력할 때에는 소수점 아래 둘째 자리에서 반올림하여 첫째 자리까지 출력한다.

예제 입력

4
0 0
0 10
10 10
10 0

예제 출력

100.0

코드

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));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int N = Integer.parseInt(br.readLine());
        long[] x = new long[N + 1];
        long[] y = new long[N + 1];
        long sum_a = 0, sum_b = 0;

        for (int i = 0; i < N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            x[i] = Integer.parseInt(st.nextToken());
            y[i] = Integer.parseInt(st.nextToken());
        }

        x[N] = x[0];
        y[N] = y[0];

        for (int i = 0; i < N; i++) {
            sum_a += x[i] * y[i + 1];
            sum_b += x[i + 1] * y[i];
        }

        String area = String.format("%.1f", (Math.abs(sum_a - sum_b) / 2.0));
        bw.write(area);

        br.close();
        bw.flush();
        bw.close();
    }
}

정리

  • 위키백과를 참고하여 풀었다.
  • 신발끈 공식을 적용하기 위해 x, y 배열의 마지막 자리인 x[N], y[N]에 각 배열의 첫번째 값(x[0], y[0])을 대입해줬다.
  • 처음에 int 로 정의하여 틀렸습니다 가 나왔다. 다음부턴 조심해야겠다.
profile
기억하기 위해 기록하는 개발로그👣

2개의 댓글

comment-user-thumbnail
2021년 7월 29일

도움 많이 받습니다 감사합니다.

답글 달기
comment-user-thumbnail
2022년 5월 16일

long... 이게 문제였네요 ㅠㅠ 뭐 문제인지 한참 찾았네 ㅠㅠㅠ

답글 달기