https://www.acmicpc.net/problem/2166
문제는 간단하다, 그냥 2차원 평면에 다각형이 주어졌을 때 넓이를 구하면 된다.
처음 문제를 보면 어떻게 구할지 이리저리 고민할 수도 있지만, 고등학교 수학시간에 신발끈 공식이라고 들어봤을 것이다.
신발끈 공식을 이용하면 무난하게 문제를 풀어 낼 수 있다.
라고 생각했지만 부동소수점을 조심해야한다.
C++에서 소수점을 다루기 위해 fixed와 precision함수를 사용했다.우선 precision은 몇자리 까지 표기할 건지를 정할 수 있다. 예를 들어서 12.3456 이 있고 cout << precision(2)를 하면 12만 출력된다. 하지만 우리는 소수점 이하의 숫자를 고정하고 싶다.그럴때는 cout << fixed; 이후에 cout << precision(2)를 하면 12.35가 출력된다.(반올림도 컴퓨터가 잘 해준다)
코드는 다음과 같다.
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
int main() {
int n; cin >> n;
double arr[10001][2]={0,};
for(int i=0;i<n;i++){
cin >> arr[i][0] >> arr[i][1];
}
arr[n][0]=arr[0][0]; arr[n][1]=arr[0][1];
double x_y=0,y_x=0;
for(int i=0;i<n;i++){
x_y += (arr[i][0]*arr[i+1][1]);
y_x += (arr[i][1]*arr[i+1][0]);
}
double ans = abs(x_y-y_x)/2;
cout << fixed;
cout.precision(1);
cout << (ans);
}
'📚알고리즘 > 백준' 카테고리의 다른 글
[백준] 플래티넘 달성 (1) | 2023.10.28 |
---|---|
[백준 27172번] 수 나누기 게임 (C++) (1) | 2023.10.17 |
[백준 25318번] solved.ac 2022 (C++) (2) | 2023.06.26 |
[백준 9465번] 스티커 (C++) (0) | 2023.05.31 |
[백준 1629번] 곱셈 (Python/파이썬) (0) | 2023.05.28 |