※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts