https://www.acmicpc.net/problem/2166
1. 아이디어
다각형의 면적은 신발끈 공식을 통해 간단하게 구할 수 있다.
오목 다각형일 경우 면적 계산이 잘못될 수 있어서 신발끈 공식이 가장 적합한 것으로 판단했다.
2. 문제풀이
신발끈 공식만 적용하면 바로 해결할 수 있고 계산한 값의 절반의 절댓값이 면적인 점에 주의해야 한다. 추가로 좌표의 곱을 구하는 과정에서 int형 오버플로우가 발생할 수 있는 점에 주의해야 한다.
3. 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
// 좌표의 곱이 int형 오버플로우가 발생할 수 있음
long[][] points = new long[1 + N][2];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
points[i][0] = Integer.parseInt(st.nextToken());
points[i][1] = Integer.parseInt(st.nextToken());
}
points[N][0] = points[0][0];
points[N][1] = points[0][1];
double area = 0;
// 신발끈 공식
for (int i = 0; i < N; i++) {
area += points[i][0] * points[i + 1][1] - points[i][1] * points[i + 1][0];
}
System.out.printf("%.1f", Math.abs(area / 2));
}
}
4. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 27323번 - 직사각형 [Java] (0) | 2024.12.02 |
---|---|
[백준] 10101번 - 삼각형 외우기 [Java] (0) | 2024.12.02 |
[백준] 4153번 - 직각삼각형 [Java] (0) | 2024.12.02 |
[백준] 10569번 - 다면체 [Java] (0) | 2024.12.02 |
[백준] 15829번 - Hashing [Java] (0) | 2024.12.02 |