어흥

[백준 2166] 다각형의 면적 (C++) 본문

알고리즘/백준

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

라이언납시오 2020. 12. 5. 14:20
728x90
반응형

문제 링크: www.acmicpc.net/problem/2166

 

2166번: 다각형의 면적

첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다. 좌표값은 절댓값이 100,000을 넘지 않는 정수이다.

www.acmicpc.net

1. 주의할 점

- 소수점으로 나타내야 하므로 Double을 사용하도록 한다(10^5*10^5 여러개를 더한 값은 Int의 범위를 벗어나므로 주의)

 

2. 구현

- 모든 좌표를 X[],Y[]에 입력받은 이후, Result를 0으로 설정한다

- Result+=CCW()의 결과값을 통해 다각형의 면적을 구한다(다각형을 이루는 순서대로 좌표가 주어진다고 적혀있음)

#include <iostream>
#include <math.h>
using namespace std;
double x[10000], y[10000];

double ccw(int a, int b, int c) {
	double aa[2] = { y[b] - y[a],x[b] - x[a] };
	double bb[2] = { y[c] - y[a],x[c] - x[a] };
	double temp = aa[0] * bb[1] - aa[1] * bb[0];
	return temp / 2;
}

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int num;
	double result = 0;
	cin >> num;
	for (int i = 0; i < num; i++)
		cin >> x[i] >> y[i];
	for (int i = 1; i < num - 1; i++)
		result += ccw(0, i, i + 1);
	cout.precision(1);
	cout << fixed;
	cout << abs(result);
	return 0;
}
728x90
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준 14324] Rain (Small) (C++)  (0) 2020.12.09
[백준 9879] Cross Country Skiing (C++)  (0) 2020.12.08
[백준 11758] CCW (C++)  (0) 2020.12.05
[백준 2170] 선 긋기 (C++)  (0) 2020.12.04
[백준 14466] 소가 길을 건너간 이유 6  (0) 2020.12.04
Comments