※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 2171번 문제인 직사각형의 개수이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/2171
2171번: 직사각형의 개수
첫째 줄에 N이 주어진다. 다음 N개의 줄에는 각 점의 x, y좌표가 주어진다. 좌표의 범위는 -1,000,000,000 이상 1,000,000,000 이하이며, 두 점의 좌표가 같은 경우는 없다.
www.acmicpc.net
직사각형의 마주보는 두 꼭짓점을 골랐을 때 남은 두 꼭짓점의 좌표가 정해진다는 점을 이용해, 두 점을 골랐을 때 나머지 두 점이 존재하는지를 브루트포스하는 것으로 문제를 해결할 수 있다.
고른 두 점 외에 다른 점이 존재하는지를 확인하는 것은 set을 이용해 간편히 구현할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <set>
#include <vector>
using namespace std;
int N;
pair<int, int> arr[5000];
set<pair<int, int>> st;
int ans = 0;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for (int i = 0; i < N; i++) {
cin >> arr[i].first >> arr[i].second;
st.insert(arr[i]);
}
for (int i = 0; i < N; i++) {
auto p1 = arr[i];
for (int j = i + 1; j < N; j++) {
auto p2 = arr[j];
if (p1.first == p2.first || p1.second == p2.second) continue;
if (st.count(make_pair(p1.first, p2.second)) == 1 && st.count(make_pair(p2.first, p1.second)) == 1) ans++;
}
st.erase(p1);
}
cout << ans;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 25814 // C++] Heavy Numbers (1) | 2022.12.02 |
---|---|
[BOJ 26075 // C++] 곰곰아 선 넘지마 (1) | 2022.12.02 |
[BOJ 26076 // C++] 곰곰이의 식단 관리 2 (0) | 2022.12.02 |
[BOJ 26073 // C++] 외로운 곰곰이는 친구가 있어요 (0) | 2022.12.02 |
[BOJ 26071 // C++] 오락실에 간 총총이 (0) | 2022.12.01 |