BOJ_2166_다각형의 면적 (Java)
BOJ_2166_다각형의 면적 (Java)
[Gold V] 다각형의 면적 - 2166
성능 요약
메모리: 19708 KB, 시간: 184 ms
분류
기하학, 다각형의 넓이
제출 일자
2024년 9월 9일 02:08:44
문제 설명
2차원 평면상에 N(3 ≤ N ≤ 10,000)개의 점으로 이루어진 다각형이 있다. 이 다각형의 면적을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다. 좌표값은 절댓값이 100,000을 넘지 않는 정수이다.
출력
첫째 줄에 면적을 출력한다. 면적을 출력할 때에는 소수점 아래 둘째 자리에서 반올림하여 첫째 자리까지 출력한다.
문제 풀이
CCW라는 세 점으로 이루어진 평행사변형 넓이를 벡터외적으로 구하는 방법을 사용했다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
* Author : nowalex322, Kim Hyeonjae
*/
import java.io.*;
import java.util.*;
public class Main {
static BufferedReader br;
static BufferedWriter bw;
static StringTokenizer st;
static int N;
static long x[], y[];
public static void main(String[] args) throws IOException {
br = new BufferedReader(new InputStreamReader(System.in));
// br = new BufferedReader(new InputStreamReader(new FileInputStream("input.txt")));
bw = new BufferedWriter(new OutputStreamWriter(System.out));
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
x = new long[N + 1];
y = new long[N + 1];
for (int i = 0; i < N; i++) {
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];
double ans = 0;
for(int i=0; i<N; i++){
ans += x[i]*y[i+1] - x[i+1]*y[i];
}
ans = Math.abs(ans)/2.0;
System.out.println(String.format("%.1f", ans));
}
}
This post is licensed under
CC BY 4.0
by the author.