[백준] 2166번 다각형의 면적 / Java, Python

Jini·2021년 8월 4일
0

백준

목록 보기
188/226

Baekjoon Online Judge

algorithm practice


- 단계별 문제풀기


32. 기하

조금 더 어려운 기하 문제를 풀어 봅시다.




Java / Python


1. 다각형의 면적

2166번

다각형의 면적을 구하는 문제



이번 문제는 다각형의 면적을 구하는 기하 문제이다.
가우스의 면적공식인 신발끈 공식을 이용한다.



  • Java



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();
	}
}




  • Python



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))





profile
병아리 개발자 https://jules-jc.tistory.com/

0개의 댓글