Post

[백준 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.