※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 5588번 문제인 별자리 찾기이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/5588
5588번: 별자리 찾기
상근이는 밤하늘 사진에서 별자리를 찾고 있다. 사진에는 꼭 찾고 싶은 별자리와 같은 형태, 방향, 크기의 도형이 한 개가 포함되어 있다. 하지만, 상근이가 가지고 있는 사진 속에는 별자리를
www.acmicpc.net
주어지는 별자리의 모양에서 한 점을 기준으로 다른 점들의 변위(dx, dy)를 저장해두자. 글쓴이는 별자리로 주어지는 첫 점을 기준으로 잡았다.
그리고 주어지는 N개의 별들에 대하여 각 별을 기준점으로 잡아 그 별의 기준으로 각 변위만큼 이동한 곳에도 별이 있는지를 전부 체크해보자. 이 과정은 set을 이용하면 편하게 구현할 수 있다.
그러한 곳이 있다면 그 곳이 바로 찾는 별자리가 있는 곳이다. 두 기준점 사이의 변위의 차이를 출력하여 문제를 해결하자.
아래는 제출한 소스코드이다.
#include <iostream>
#include <set>
#include <vector>
using namespace std;
set<pair<int, int>> st;
vector<pair<int, int>> vec;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int X, Y;
int M; cin >> M;
cin >> X >> Y;
for (int i = 1; i < M; i++) {
int x, y; cin >> x >> y;
vec.push_back(make_pair(x - X, y - Y));
}
int N; cin >> N;
while (N--) {
int x, y; cin >> x >> y;
st.insert(make_pair(x, y));
}
for (auto p : st) {
bool chk = 1;
int XX = p.first, YY = p.second;
for (auto pp : vec) {
int xx = pp.first, yy = pp.second;
if (st.find(make_pair(XX + xx, YY + yy)) == st.end()) {
chk = 0;
break;
}
}
if (chk) {
cout << XX - X << ' ' << YY - Y;
break;
}
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 16360 // C++] Go Latin (0) | 2022.06.20 |
---|---|
[BOJ 5585 // C++] 거스름돈 (0) | 2022.06.19 |
[BOJ 14731 // C++] 謎紛芥索紀 (Large) (0) | 2022.06.19 |
[BOJ 14729 // C++] 칠무해 (0) | 2022.06.19 |
[BOJ 5586 // C++] JOI와 IOI (0) | 2022.06.19 |