PS/Baekjoon Online Judge
[백준 2166] 다각형의 면적 [C]
kimyoungrok
2021. 8. 25. 03:57
728x90

풀이
"백준 11758, CCW"를 이용해 풀이했다.
벡터곱의 값은 두 벡터로 이루어지는 평행사변형의 넓이와 동일하므로, 벡터곱의 값을 반으로 나눈 값을 더해주면 된다.
기준점이 필요하기 때문에 처음에 입력받은 좌표를 기준점으로 했다.
소스코드
#include <stdio.h>
typedef struct{
double x, y;
}Point;
int main(){
int N;
scanf("%d", &N);
Point p[N];
for (int i = 0; i < N; i++)
scanf("%lf %lf", &p[i].x, &p[i].y);
double sum = 0;
for (int i = 1; i < N; i++)
sum += ((p[i-1].x - p[0].x)*(p[i].y - p[0].y) - (p[i-1].y - p[0].y)*(p[i].x - p[0].x)) / 2;
printf("%.1lf", sum *= sum < 0 ? -1 : 1);
}
출처
2166번: 다각형의 면적
첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다. 좌표값은 절댓값이 100,000을 넘지 않는 정수이다.
www.acmicpc.net
728x90