-
[기하학] 다각형의 넓이(2166) C++BOJ C++ 알고리즘 공부 2022. 2. 10. 00:38
https://www.acmicpc.net/problem/2166
1. 문제 개요
2차원 평면상에 N(3 ≤ N ≤ 10,000)개의 점으로 이루어진 다각형이 주어질 때, 이 다각형의 면적을 구하는 문제.
2. 입출력
3. 문제 풀이
다각형을 이루는 순서대로 점이 주어지므로 신발끈 공식을 사용해서 해결할 수 있다.
4. 전체 코드
#include <algorithm> #include <stdio.h> #include <vector> #include <cmath> using namespace std; //다각형의 넓이 int main(){ vector<pair<long long ,long long >> v; int n; long long x,y; scanf("%d",&n); //점의 개수 for(int i=0;i<n;i++){ scanf("%lld%lld",&x,&y); v.push_back({x,y}); } double sum=0; for(int i=0;i<n-1;i++){ sum += (v[i].first*v[i+1].second)-(v[i].second*v[i+1].first); } //신발끈 공식 sum += (v[n-1].first*v[0].second)-(v[n-1].second*v[0].first); //첫점과 마지막점 printf("%.1f\n", floor(std::abs(sum)*0.5*10+0.5)/10); //절댓값 sum의 값을 반올림한 값. return 0; }
'BOJ C++ 알고리즘 공부' 카테고리의 다른 글
[기하학] 선분 교차1 (17386) (C++) (0) 2022.02.15 [기하학] CCW(11758) (C/C++) (0) 2022.02.12 [기하학] 두 원(7869) (C++) (0) 2022.02.11 [플로이드-와샬] 운동(1956) (0) 2022.02.07 [자료구조] 이진 검색 트리(5639) (0) 2022.02.03