본문 바로가기
코딩/백준-자바

[자바] 백준 21661번: 다각형의 면적

by 철없는민물장어 2023. 2. 8.
728x90
반응형

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

 

2166번: 다각형의 면적

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

www.acmicpc.net

 

입력으로 꼭짓점의 좌표가 순서대로 들어오는데,

 

순서대로라는 점을 보아

신발끈 공식을 사용하면 될 것 같다.

 

신발끈 공식은

꼭짓점의 좌표를 순서대로 늘어놓고, 교차로 곱하고 빼면서 다각형의 넓이를 구하는 공식이다.

 

자세한 계산방법은 

https://namu.wiki/w/%EC%8B%A0%EB%B0%9C%EB%81%88%20%EA%B3%B5%EC%8B%9D

 

신발끈 공식 - 나무위키

이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권

namu.wiki

 

여기 나무위키에 이해하기 쉽게 나와있다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class P2166 {

	public static void main(String[] args) throws NumberFormatException, IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n= Integer.parseInt(br.readLine());
		long[][] arr=new long[n+1][2];
		for(int i=0;i<n;i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			arr[i][0]=Long.parseLong(st.nextToken());
			arr[i][1]=Long.parseLong(st.nextToken());
			//[i][0]==x, [i][1]==y
			
		}
		arr[n][0]=arr[0][0];
		arr[n][1]=arr[0][1];
		
		long result=0;
		for(int i=0;i<n;i++) {
			result+=((arr[i][0]*arr[i+1][1])-(arr[i][1]*arr[i+1][0]));
		}
		result=Math.abs(result);
		System.out.println(String.format("%.1f", result/2.0));
	}

}
728x90
반응형

댓글