728x90
[Gold V] 다각형의 면적 - 2166
성능 요약
메모리: 34624 KB, 시간: 384 ms
분류
기하학(geometry), 다각형의 넓이(polygon_area)
문제 설명
2차원 평면상에 N(3 ≤ N ≤ 10,000)개의 점으로 이루어진 다각형이 있다. 이 다각형의 면적을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다. 좌표값은 절댓값이 100,000을 넘지 않는 정수이다.
출력
첫째 줄에 면적을 출력한다. 면적을 출력할 때에는 소수점 아래 둘째 자리에서 반올림하여 첫째 자리까지 출력한다.
다각형의 넓이를 구하는 신발끈 공식을 활용하였다.
https://gaussian37.github.io/math-algorithm-polygon_area/
n차원 다각형의 넓이 계산
gaussian37's blog
gaussian37.github.io
공식을 활용하면 쉬운데, 체크해야 하는 것이 몇가지 있다.
결과가 음수일 수도 있기 때문에 Math.abs()
함수를 사용해야 한다.
그리고 소수점 둘째 자리에서 반올림 하기 위해 String.format
을 활용하였다.
System.out.println(String.format("%.1f", Math.abs(result)/2.0));
전체 코드
package BOJ.Gold.g5;
import java.util.Scanner;
public class BOJ_2166_다각형의면적 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
long[] X = new long[N + 1]; // 마지막엔 0번째 좌표 적기
long[] Y = new long[N + 1];
long result = 0;
X[0] = X[N] = sc.nextLong();
Y[0] = Y[N] = sc.nextLong();
for (int i = 1; i < N; i++) {
X[i] = sc.nextLong();
Y[i] = sc.nextLong();
}
for (int i = 0; i < N; i++) {
result += X[i] * Y[i + 1];
result -= X[i + 1] * Y[i];
}
System.out.println(String.format("%.1f", Math.abs(result)/2.0));
}
}
728x90
'문제 풀이 > BOJ' 카테고리의 다른 글
[백준] 2533 - 사회망 서비스(SNS) (자바 Java) (0) | 2023.01.07 |
---|---|
[백준] 9328 - 열쇠 (자바 Java) (0) | 2023.01.02 |
[백준] 1005 - ACM Craft (자바 Java) (0) | 2022.12.27 |
[백준] 2493 - 탑 (자바 Java) (1) | 2022.12.23 |
[백준] 3109 - 빵집 (자바 Java) (0) | 2022.12.20 |