본문 바로가기

Dev/BOJ

[백준 2166] 다각형의 면적

 

 약간의 수학을 이용하는 단순 구현 문제이다. 처음에 헤른의 공식을 이용해 한 점을 정해두고 두 점을 한 칸씩 옮겨가며 각각 삼각형의 넓이를 구해 모두 더하는 방법을 썼다가 틀렸습니다를 받아서 조금 헤맸다. 그래서 문제를 가만히 쳐다보니까 볼록 다각형임을 보장할 수가 없는 상태여서 해당 풀이는 바로 폐기하게 되었다.

 주어지는 좌표의 최대 갯수가 그리 많지 않기 때문에 신발끈 공식을 이용해서 심플하게 해결했다.

 

#include <iostream>
#include <cmath>

using namespace std;

typedef pair<long long, long long> point;

int main() {
    int n;
    cin >> n;

    point pointArr[10001];

    double sum1 = 0;
    double sum2 = 0;

    for(int i=0; i<n; i++) {
        cin >> pointArr[i].first >> pointArr[i].second;
    }
    pointArr[n] = pointArr[0];

    for(int i=0; i<n; i++) {
        sum1 += pointArr[i].first*pointArr[i+1].second;
        sum2 += pointArr[i+1].first*pointArr[i].second;
    }
    
    cout << fixed;
    cout.precision(1);
    cout << abs(sum1-sum2) / 2;
}

'Dev > BOJ' 카테고리의 다른 글

[백준 7453] 합이 0인 네 정수  (0) 2024.08.21
[백준 2239] 스도쿠  (0) 2024.08.20
[백준 12100] 2048 (Easy)  (0) 2024.08.19
[백준 1509] 팰린드롬 분할  (0) 2024.08.16
[백준 1562] 계단 수  (0) 2024.08.15