조금 더 어려운 기하 문제를 풀어 봅시다.
Java / Python
다각형의 면적을 구하는 문제
이번 문제는 다각형의 면적을 구하는 기하 문제이다.
가우스의 면적공식인 신발끈 공식을 이용한다.
import java.util.*;
import java.io.*;
public class Main {
static class Point {
long x, y;
public Point(long x, long y) {
this.x = x;
this.y = y;
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
Point[] point = new Point[N + 1];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
long x = Integer.parseInt(st.nextToken());
long y = Integer.parseInt(st.nextToken());
point[i] = new Point(x, y);
}
long result = 0;
for (int i = 0; i < N - 1; i++) {
result += (point[i].x * point[i + 1].y) - (point[i + 1].x * point[i].y);
}
result += (point[N - 1].x * point[0].y) - (point[0].x * point[N - 1].y);
bw.write(String.format("%.1f", (Math.abs(result) / 2.0)) + "\n");
bw.flush();
bw.close();
br.close();
}
}
import sys
import math
input = sys.stdin.readline
N = int(input())
point = [[]] * N
for i in range(N):
point[i] = list(map(int, input().split()))
point.append(point[0])
result = 0
for i in range(N):
result += (point[i][0] * point[i+1][1]) - (point[i+1][0] * point[i][1])
print("%.1f" % (abs(result)/2))