[2166] 다각형의 면적

Worldi·2022년 3월 12일
0

알고리즘

목록 보기
48/59

코드

#include <iostream>
using namespace std;
#include <algorithm>
#include <cmath>
double x[10001];
double y[10001];
double area[10001];

int main(void)
{
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> x[i] >> y[i];
    }
    for (int i = 0; i < n - 2; i++)
    {
        area[i] = ((x[0] - x[i + 1]) * (y[0] - y[i + 2]) - (x[0] - x[i + 2]) * (y[0] - y[i + 1])) / 2.0;
    }
    double sum = 0.0;

    for (int i = 0; i < n - 2; i++)
    {
        sum += area[i];
    }
    cout.precision(1);
    cout << fixed;
    cout << abs(sum);
    return 0;
}

문제 접근

다각형을 삼각형으로 쪼갠다.
삼각형 -> 신발끈 정리를 활용한다.

해결 방법

  1. x, y input 입력 받고
  2. 각각의 삼각형 넓이구해주고
  3. 더해서 출력

헷갈린 점

  1. x,y 처음에 int 로 받음. x,y가 큰 숫자일 경우, 오버플로우가 나서, double 의 형식으로 고쳐줌
  2. abs 를 맨마지막에 해줘야함. 나는 각각의 area 에 대해서 abs 를 해줬었는데, 생각해보니까 모든 합을 구한 다음에 전체에 abs 를 해줘야함 ㅎㅎ...

리얼 광기다,,,,

profile
https://worldi.tistory.com/ 로 블로그 이전합니다.

0개의 댓글