https://www.acmicpc.net/problem/2166
주어진 N개의 점으로 이루어진 다각형의 면적을 계산하는 문제다.
입력받은 점들을 배열 arr에 저장하고,
신발끈 공식(Shoelace Formula)을 사용해 면적을 계산한다.
신발끈 공식이 무엇인지 알지못해 구글링을 통해 검색하여 풀이하였다.
calculate 메서드는 다각형의 면적 계산을 담당하며,
점의 좌표를 이용해 두 개의 합, sum1과 sum2를 구한다.
은 각 점의 x좌표와 다음 점의 y좌표를 곱한 값들의 합이고, sum2
는 각 점의 y좌표와 다음 점의 x좌표를 곱한 값들의 합이다.
이 두 값을 이용해 (sum1 - sum2) / 2 를 계산하여 다각형의 면적을 구한다. 마지막 점과 첫 번째 점의 계산을 위해 인덱스를 (i + 1) % N 으로 처리해 순환 구조를 구현했다.
main 메서드는 점의 개수 과 각 점의 좌표를 입력받아 arr에 저장한다.
calculate 메서드를 호출해 면적을 계산한 후,
절대값을 취해 결과를 소수점 첫째 자리까지 출력한다.
다각형의 점들은 입력 순서대로 배열에 저장되므로,
신발끈 공식을 적용하기 위해 별도의 정렬이 필요하지 않다.
신발끈 공식 참고
https://ko.wikipedia.org/wiki/%EC%8B%A0%EB%B0%9C%EB%81%88_%EA%B3%B5%EC%8B%9D
신발끈 공식 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 신발끈 공식(―公式)은 좌표평면 상에서 꼭짓점의 좌표를 알 때 다각형의 면적을 구할 수 있는 방법이다. 다각형의 각 꼭짓점의 좌푯값을 교차하여 곱하는 모
ko.wikipedia.org
import java.io.*;
import java.util.*;
public class Main {
private static int N;
private static long[][] arr;
static double calculate(){
double sum1 = 0,sum2 = 0;
for (int i = 0 ; i < N ; i ++){
sum1 += arr[i][0] * arr[(i+1)%N][1];
sum2 += arr[i][1] * arr[(i+1)%N][0];
}
return (sum1-sum2)/2;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
arr = new long[N][2];
StringTokenizer st;
for (int i = 0 ; i < N ; i++){
st = new StringTokenizer(br.readLine());
arr[i][0] = Integer.parseInt(st.nextToken());
arr[i][1] = Integer.parseInt(st.nextToken());
}
System.out.printf("%.1f%n",Math.abs(calculate()));
}
}
'Algorithm & Data Structures > BOJ' 카테고리의 다른 글
b.2473 세용액 (0) | 2024.12.11 |
---|---|
b.1562 계단수 (2) | 2024.12.09 |
b2162. 선분그룹 (2) | 2024.12.03 |
b.2143 두 배열의 합 (2) | 2024.11.29 |
b2098. 외판원 순회 (0) | 2024.11.27 |