백준 2166 다각형의 면적 (C++)

안유태·2023년 6월 12일
0

알고리즘

목록 보기
96/239

2166번: 다각형의 면적

이전에 풀었던 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;
}
profile
공부하는 개발자

0개의 댓글