250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준#BOJ#1939#중량제한
- 백준#boj#12755
- 백준#BOJ#2615#오목
- 백준#BOJ#14501#퇴사#브루트포스
- 백준#boj#16932#모양만들기
- 백준#BOJ#12865#평범한배낭
- 백준#BOJ#8012#한동이는영업사원
Archives
- Today
- Total
순간을 성실히, 화려함보단 꾸준함을
[ boj : 2121 ] 넷이 놀기 본문
문제 : 좌표들이 주어지고 (가로,세로) 에 맞는 직사각형을 그릴수 있는 개수를 구하시오
해설 : 처음에는 전 되게 복잡하게 생각했습니다.
주어지는 좌표들을 정렬한다음에 각 좌표들에 대해서 x축을 기준으로 lower_bound 와 upper_bound를 구해준다음 이 범위 내에서 y에 해당하는 값이 존재한다면 카운트해주는 방법,,,으로 풀려했는데
전혀 이렇게 복잡하게 풀 필요도 없는 문제였더라구요.
그냥 주어진 좌표들을 전부 set에다가 박아줍니다. 그리고 (a+x,b) (a,b+y) (a+x,b+y) 이 세점이 set에 존재한다면 직사각형을 만들 수 있다는 뜻이니 카운트 해주면 됩니다.
#include<bits/stdc++.h>
using namespace std;
set<pair<int, int>> s;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n;
int x, y;
vector<pair<int, int>> v;
cin >> n >> x >> y;
v.resize(n);
for (int i = 0; i < n; i++) {
cin >> v[i].first >> v[i].second;
s.insert({ v[i].first,v[i].second });
}
int a, b;
int ans = 0;
for (int i = 0; i < n; i++) {
a = v[i].first;
b = v[i].second;
if (s.find({ a + x,b }) == s.end())continue;
if (s.find({ a,b + y }) == s.end())continue;
if (s.find({ a + x,b + y }) == s.end())continue;
ans++;
}
cout << ans;
return 0;
}
'알고리즘,SQL > 백준,BOJ' 카테고리의 다른 글
[ boj : 1090 ] 체커 (0) | 2021.03.25 |
---|---|
[ boj : 2357 ] 농구 골대 세우기 (1) | 2021.03.23 |
[ boj : 14919 ] 분포표 만들기 (0) | 2021.03.17 |
[ boj : 11663 ] 선분 위의 점 (0) | 2021.03.14 |
[ boj : 11561 ] 징검다리 (0) | 2021.03.13 |