- 문제 링크 : boj.kr/2778
- 난이도 : G3
- 태그 : 기하학
2778번: 측량사 지윤
측량사 지윤이는 삼각형을 너무 좋아해서 하루에 하나씩 삼각형을 그린다. 그런데 어느 날 밤에 삼각형을 그리려고 하는데, 작업실이 정전 되고 말았다. 그래도 지윤이는 감으로 직선 3개를 그
www.acmicpc.net
코드
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define INF 0x7FFFFFFF
using namespace std;
using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;
struct line {
ld a;
ld b;
ld c;
};
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cout.precision(4);
cout << fixed;
int T;
cin >> T;
while(T--) {
line arr[3];
for(int i = 0; i < 3; i++) {
cin >> arr[i].a >> arr[i].b >> arr[i].c;
}
if(arr[0].a*arr[1].b == arr[1].a*arr[0].b
|| arr[1].a*arr[2].b == arr[2].a*arr[1].b
|| arr[2].a*arr[0].b == arr[0].a*arr[2].b) {
cout << "0.0000\n";
continue;
}
pair<ld, ld> dots[3];
int d1 = 0, d2 = 1;
dots[0].first = (arr[d1].b*arr[d2].c-arr[d2].b*arr[d1].c) / (arr[d1].a*arr[d2].b-arr[d2].a*arr[d1].b);
if(arr[d1].b != 0) dots[0].second = -(arr[d1].a/arr[d1].b) * (dots[0].first) - (arr[d1].c/arr[d1].b);
else dots[0].second = -(arr[d2].a/arr[d2].b) * (dots[0].first) - (arr[d2].c/arr[d2].b);
d1 = 1; d2 = 2;
dots[1].first = (arr[d1].b*arr[d2].c-arr[d2].b*arr[d1].c) / (arr[d1].a*arr[d2].b-arr[d2].a*arr[d1].b);
if(arr[d1].b != 0) dots[1].second = -(arr[d1].a/arr[d1].b) * (dots[1].first) - (arr[d1].c/arr[d1].b);
else dots[1].second = -(arr[d2].a/arr[d2].b) * (dots[1].first) - (arr[d2].c/arr[d2].b);
d1 = 2; d2 = 0;
dots[2].first = (arr[d1].b*arr[d2].c-arr[d2].b*arr[d1].c) / (arr[d1].a*arr[d2].b-arr[d2].a*arr[d1].b);
if(arr[d1].b != 0) dots[2].second = -(arr[d1].a/arr[d1].b) * (dots[2].first) - (arr[d1].c/arr[d1].b);
else dots[2].second = -(arr[d2].a/arr[d2].b) * (dots[2].first) - (arr[d2].c/arr[d2].b);
ld s = 0;
for(int i = 0; i < 3; i++) {
s += dots[i].first*dots[(i+1)%3].second - dots[i].second*dots[(i+1)%3].first;
}
s = abs(s) / 2;
cout << s << "\n";
}
return 0;
}
풀이
구해야 하는 것 자체는 어렵지 않다. 삼각형을 만든다면 각 직선들의 교점을 찾고 넓이를 구해주면 된다.
삼각형이 생기지 않을 조건을 먼저 고려해주면 쉽다.
다만 구현이 어려우므로 실수하지 않도록 유의해야 한다.
728x90
'PS' 카테고리의 다른 글
BOJ 5696 : 숫자 세기 (0) | 2024.04.28 |
---|---|
BOJ 28137 : 뭐라고? 안들려 (0) | 2024.04.27 |
BOJ 14204 : 표 정렬 (0) | 2024.04.25 |
BOJ 2045 : 마방진 (0) | 2024.04.24 |
BOJ 3064 : Minesweeper (0) | 2024.04.23 |