[백준 C++] 2166번 다각형의 면적
백준 2166번 다각형의 면적 cpp c++로 풀이
[백준 C++] 2166번 다각형의 면적
11049번: 행렬 곱셈 순서
문제 요약
문제
2차원 평면상에 N(3 ≤ N ≤ 10,000)개의 점으로 이루어진 다각형이 있다. 이 다각형의 면적을 구하는 프로그램을 작성하시오.
사용 알고리즘
수학
입출력
- 입력: 첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다. 좌표값은 절댓값이 100,000을 넘지 않는 정수이다.
- 출력: 첫째 줄에 면적을 출력한다. 면적을 출력할 때에는 소수점 아래 둘째 자리에서 반올림하여 첫째 자리까지 출력한다. ``` 예제1
입력 4 0 0 0 10 10 10 10 0 출력 100.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
## 풀이
신발끈 공식을 이용하면 쉽게 풀 수 있다. 신발끈 정리를 이용하게 된다면 소수 처리도 마지막에 2로 나누는게 끝이기에 쉽게 처리할 수 있다.
## 어려웠던 점
신발끈 정리 마지막에 처음과 끝을 다시 곱해주는 것을 잊지 말자. 범위가 크므로 long long으로 잡아두고 풀자
## 전체 코드
```cpp
#include <iostream>
#include <vector>
using namespace std;
long long s;
int n;
long long x, y, xx, yy, tx, ty;
int main(){
cin >> n;
cin >> x >> y;
tx = x;
ty = y;
for(int i = 1; i < n; i++){
cin >> xx >> yy;
s += x*yy - xx*y;
x = xx;
y = yy;
}
s += x*ty - y*tx;
if(s < 0) s *=-1;
double t = s/2.0;
cout << fixed;
cout.precision(1);
cout << t;
}
This post is licensed under CC BY 4.0 by the author.