728x90
백준 boj 2166 다각형의 면적 골드 5
🔗 문제링크 🔗
2166번: 다각형의 면적
첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다. 좌표값은 절댓값이 100,000을 넘지 않는 정수이다.
www.acmicpc.net
🌟 생각 흐름 🌟
문제를 읽고 다각형의 면적을 구하는 방법이 있을 것 같아 구글링을 했다
아래 페이지를 참조하여 구현하였다.
다각형 넓이 구하기: 15 단계 (이미지 포함) - wikiHow
다각형의 넓이를 계산하는 일은 정삼각형 넓이를 구하는 것처럼 간단하기도 하지만 각 변의 길이가 다른 11각형의 넓이를 구하는 것처럼 복잡하기도 합니다. 다양한 다각형의 넓이를 구하는 방
ko.wikihow.com
위에 페이지에서 참조한 부분을 코드로 구현 시에 주의할 점은 범위만 주의하면 된다
input:
첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다. 좌표값은 절댓값이 100,000을 넘지 않는 정수이다.
이므로 100_000 * 100_000 = 10_000_000_000 이므로 int의 범위를 초과하기 때문에 곱셈을 수행하는 경우 double형으로 변경하여 계산하였다 ( 계산 시에 계산하는 자료형을 따라서 계산하기 때문에 오버플로우가 발생한다 )
🍳 코드 🍳
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int edge = Integer.parseInt(br.readLine());
int arr[][] = new int[edge][2];
/*input*/
for (int i = 0; i < edge; i++) {
st = new StringTokenizer(br.readLine());
arr[i][0] = Integer.parseInt(st.nextToken());
arr[i][1] = Integer.parseInt(st.nextToken());
}
/*cal*/
double sum = 0;
for (int i = 0; i < edge; i++) {
sum += (double) arr[i][0] * arr[(i + 1) % edge][1];
sum -= (double)arr[i][1] * arr[(i + 1) % edge][0];
}
/*print*/
System.out.printf("%.1f", Math.abs(sum / 2));
}
}
728x90
'알고리즘' 카테고리의 다른 글
이진탐색(binary search) (0) | 2022.11.05 |
---|---|
[백준 JAVA] 16724 피리부는 사나이 (0) | 2022.10.25 |
[백준 java] 2225번 합분해 DP (0) | 2022.10.23 |
[백준 Java]9466_텀프로젝트 (0) | 2022.10.22 |
[백준 JAVA] 14889 스타트와 링크, 합 이용 (1) | 2022.10.19 |
댓글