본문 바로가기

ALGORITHM

백준 2166 다각형의 면적 (Java)

1. 문제 링크

 

2166번: 다각형의 면적

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

www.acmicpc.net

 

2. 문제 및 입출력예제

 

3. 문제 풀이

1. 다각형의 면적은 삼각형으로 나눠서 구할 수 있다.

2. 다각형을 이루는 순서대로 주어지기 때문에 반복문을 통해 구했다.

3. 첫번째 점을 기준으로 2개씩 순서대로 고르면서 삼각형의 면적을 구했다.

4. 답이 음수가 나오는 경우가 있어 절댓값으로 출력했다.

 

+) 값의 범위를 생각하면 int가 아니라 long으로 구해야 한다는 것을 주의하자

4. 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;

public class Main {
	static class Point{
		long x;
		long y;
		public Point(long x, long y) {
			super();
			this.x = x;
			this.y = y;
		}
	}
    
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		double result = 0;
		int N = Integer.parseInt(br.readLine());
		ArrayList<Point> list = new ArrayList<>();
		for(int i=0;i<N;i++) {
			String[] split = br.readLine().split(" ");
			long x = Long.parseLong(split[0]);
			long y = Long.parseLong(split[1]);
			list.add(new Point(x, y));
		}
        
		for(int i=1;i<N-1;i++) {
			Point p1 = list.get(0);
			Point p2 = list.get(i);
			Point p3 = list.get(i+1);
			long one = p1.x*p2.y+p2.x*p3.y+p3.x*p1.y;
			long two = p1.x*p3.y+p2.x*p1.y+p3.x*p2.y;
			result += one - two;
		}
		System.out.printf("%.1f",Math.abs(result/2));
	}
}

 

'ALGORITHM' 카테고리의 다른 글

백준 12886 돌 그룹 (Java)  (0) 2023.06.24
백준 14442 벽 부수고 이동하기 2 (Java)  (0) 2023.06.23
백준 14620 꽃길 (Java)  (0) 2023.06.14
백준 1965 상자넣기 (Java)  (0) 2023.06.13
백준 3187 양치기 꿍 (Java)  (0) 2023.06.12