본문 바로가기
백준

백준 1485 정사각형

by 콩순이냉장고 2021. 7. 2.

문제 URL : https://www.acmicpc.net/problem/1485

 

1485번: 정사각형

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 네 줄로 이루어져 있으며, 점의 좌표가 한 줄에 하나씩 주어진다. 점의 좌표는 -100,000보다 크거나 같고, 100,000보다 작거나 같

www.acmicpc.net

 

문제 접근법

  • 4점을 정렬하면 아래 그림과같은 사각형의 순서가 나옵니다. A~D 점으로 

 

 

  • 그후 4개의 모든선이 길이가 같아야겠죠? 정사각형이니까 
  • 마지막으로 길이가 같다고 정사각형은 아닙니다. 각도또한 90도인지 확인하기위해 피타고라스 공식을 이용하여
  • AD^2 = AB^2+BD^2 인지 확인하고 CB의 길이도 마찬가지입니다.

소스코드 : 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <bits/stdc++.h>
using namespace std;
#define ll long long
vector<pair<ll, ll>> v;
void init() {
    v.clear();
}
void input() {
    v.resize(4);
    for (int i = 0; i < 4; i++)
        cin >> v[i].first >> v[i].second;
}
 
ll length(ll x1, ll y1, ll x2, ll y2) { return pow(x1 - x2, 2+ pow(y1 - y2, 2); }
bool check() {
    ll row1 = length(v[0].first, v[0].second, v[1].first, v[1].second);
    ll col1 = length(v[0].first, v[0].second, v[2].first, v[2].second);
    ll row2 = length(v[2].first, v[2].second, v[3].first, v[3].second);
    ll col2 = length(v[3].first, v[3].second, v[1].first, v[1].second);
    
    ll diagona1 = length(v[1].first, v[1].second, v[2].first, v[2].second);
    ll diagonal2 = length(v[0].first, v[0].second, v[3].first, v[3].second);
 
    return row1 == row2 && row1 == col1 && row1 == col2 && (row1 + col1) == diagona1 && (row1 + col2) == diagonal2;
 
 
}
 
void solve() {
    int x, y;
    sort(v.begin(), v.end());
    cout << check() << "\n";
}
 
 
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    //freopen("input.txt", "r", stdin);
    int test;
    cin >> test;
    while (test--) {
        init();
        input();
        solve();
    }
    return 0;
}
cs

 

 

궁금한점 혹은 모르는점 댓글은 언제든지 환영입니다.

'백준' 카테고리의 다른 글

백준 2531 회전 초밥  (0) 2021.07.02
백준 20551 Sort 마스터 배지훈의 후계자  (0) 2021.07.02
백준 1331 나이트 투어  (0) 2021.07.02
백준 2616 소형기관차  (0) 2021.06.28
백준 18352 특정 거리의 도시 찾기  (0) 2021.06.28