이전에 풀었던 ccw를 활용한 문제이다. ccw를 이용해 3점의 외적을 구하는 과정을 반복하고 이를 모두 더해주었다.
3점의 외적을 구하는 방식이기 때문에 겹치는 부분이 발생하므로 2로 나누어 주었고 방향에 따라 음수가 나올 수 있기때문에 절댓값으로 출력해주었다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef pair<int, int> pii;
int N;
vector<pii> xy;
void solution() {
double result = 0;
for (int i = 1; i < N - 1; i++) {
double x1 = xy[0].first, y1 = xy[0].second;
double x2 = xy[i].first, y2 = xy[i].second;
double x3 = xy[i + 1].first, y3 = xy[i + 1].second;
double size = (x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1);
result += size / 2;
}
cout << fixed;
cout.precision(1);
cout << abs(result);
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> N;
int x, y;
for (int i = 0; i < N; i++) {
cin >> x >> y;
xy.push_back({ x,y });
}
solution();
return 0;
}