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

 

이번에 볼 문제는 백준 25984번 문제인 Extended Braille이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/25984

 

주어지는 각 점자를 구성하는 점 중 가장 왼쪽에 있는 점과 위쪽에 있는 점의 위치를 찾고 그 두 위치를 기준으로 점들을 모두 평행이동시켜 저장하자. 이렇게 저장하면 두 점자가 같은 것과 두 점자를 이루는 점의 좌표가 일치하는 것은 서로 동치가 된다.

 

이제 점을 모은 벡터를 담는 set을 이용해 문제를 해결할 수 있다. 이 과정에서, 같은 점의 모음이 서로 같게 판정되도록 각 벡터가 담은 점은 정렬해두자.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;

int N, K;
set<vector<pair<int, int>>> st;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N;
	while (N--) {
		cin >> K;
		int mn1 = 1000000007, mn2 = 1000000007;
		vector<pair<int, int>> tmp;
		while (K--) {
			int x, y; cin >> x >> y;
			mn1 = min(mn1, x), mn2 = min(mn2, y);
			tmp.emplace_back(make_pair(x, y));
		}
		for (auto &p : tmp) {
			p.first -= mn1, p.second -= mn2;
		}
		sort(tmp.begin(), tmp.end());
		st.insert(tmp);
	}

	cout << st.size();
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 12111 // C++] Turnir  (0) 2024.08.21
[BOJ 25989 // C++] Jabbing Jets  (0) 2024.08.20
[BOJ 17586 // C++] Diagonal Cut  (0) 2024.08.18
[BOJ 17500 // C++] 국경  (0) 2024.08.17
[BOJ 29779 // C++] Colliding Encoding  (0) 2024.08.16

+ Recent posts