PS/Baekjoon Online Judge

[백준 2166] 다각형의 면적 [C]

kimyoungrok 2021. 8. 25. 03:57

백준 - 2166


풀이

"백준 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

'PS > Baekjoon Online Judge' 카테고리의 다른 글

[백준 2239] 스도쿠 [C]  (0) 2021.08.25
[백준 1806] 부분합 [C]  (0) 2021.08.25
[백준 11758] CCW [C]  (0) 2021.08.25
[백준 9527] 1의 개수 세기 [C]  (0) 2021.08.25
[백준 9252] LCS 2 [C]  (0) 2021.08.24