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

문제



풀이

문제 해석을 하자면,

  • 다각형의 면적을 구하는 문제이다.


풀이

  • 다각형의 면적은 한 점을 기준으로 모든 점을 외적한 값을 더하면 된다.
  • 마지막에는 꼭 abs로 한 번 감싸주고 나누기 2.0를 해주자.



코드

#include<iostream>
using namespace std;

struct point {
	long long x; long long y;
};
typedef point Point;

long long ccw2(Point a, Point b) {
	return a.x * b.y - a.y * b.x;
}

long long ccw(Point r, Point a, Point b) {
	a.x -= r.x;
	a.y -= r.y;
	b.x -= r.x;
	b.y -= r.y;
	return ccw2(a, b);
}

// 모든 외적의 값을 더한다.
double area(Point inPoint[], int N) {
	double result = 0;
	// 기준점 : inPoint[0]
	for (int i = 1; i < N; i++) {
		int ret = (i + 1) % N; // 마지막에 인덱스 n을 0으로 바꿔서 연산하게 됨
		result += ccw(inPoint[0], inPoint[i], inPoint[ret]);
	}
	return abs(result)/2.0;
}

Point inPoint[10005];
int N;
int i, j, k;

int main() {
	// input
	cin >> N;
	for (i = 0; i < N; i++) 
		cin >> inPoint[i].x >> inPoint[i].y;

	// run % output
	printf("%.1lf" , area(inPoint, N));

	return 0;
}



느낀점

생략

댓글남기기