반응형

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

 

10216번: Count Circle Groups

백준이는 국방의 의무를 수행하기 위해 떠났다. 혹독한 훈련을 무사히 마치고 나서, 정말 잘 생겼고 코딩도 잘하는 백준은 그 특기를 살려 적군의 진영을 수학적으로 분석하는 일을 맡게 되었

www.acmicpc.net

 

각 통신탑들이 같은 영역에 포함되어 있는지 구한 뒤, 같은 영역에 속해있다면 같은 그룹으로 묶어주었습니다.

거리 R 내에 포함되는 통신 영역의 범위 기준이 모호했는데, 좌표 평면에서 두 점 사이의 거리를 계산한 것으로 기준을 잡으면 되었습니다.

 

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

int t, n, x, y, r, p[5001];
vector<vector<int>> arr;

int findParent(int x) {
	if (p[x] == x) return x;
	else return p[x] = findParent(p[x]);
}

int main() {
	scanf("%d", &t);
	while (t--) {
		arr.clear();
		scanf("%d", &n);
		for (int i = 0; i < n; i++) {
			scanf("%d %d %d", &x, &y, &r);
			arr.push_back({ x, y, r });
			p[i] = i;
		}
		int cnt = 0;
		for (int i = 0; i < arr.size(); i++) {
			int ix = arr[i][0];
			int iy = arr[i][1];
			int ir = arr[i][2];
			for (int j = i + 1; j < arr.size(); j++) {
				int jx = arr[j][0];
				int jy = arr[j][1];
				int jr = arr[j][2];
				int dx = ix - jx;
				int dy = iy - jy;
				int dr = ir + jr;
				if (dx * dx + dy * dy <= dr * dr) {
					int pi = findParent(i);
					int pj = findParent(j);
					if (pi != pj) {
						p[pi] = pj;
						cnt++;
					}
				}
			}
		}
		printf("%d\n", n - cnt);
	}
}
반응형

'Algorithm' 카테고리의 다른 글

백준 1800 : 인터넷 설치  (0) 2021.11.15
백준 1937 : 욕심쟁이 판다  (0) 2021.11.15
백준 14923 : 미로 탈출  (0) 2021.11.15
백준 1238 : 파티  (0) 2021.11.15
백준 14676 : 영우는 사기꾼?  (0) 2021.11.15

+ Recent posts