반응형
import java.util.*;
import java.io.*;
public class Main {
static int[] parent;
static class Point {
int x;
int y;
int r;
Point(int x, int y, int r) {
this.x = x;
this.y = y;
this.r = r;
}
}
public static boolean union(int x, int y) {
x = find(x);
y = find(y);
if(x == y) return false;
if(x <= y) parent[y] = x;
else parent[x] = y;
return true;
}
public static int find(int x) {
if (parent[x] == x) return x;
return find(parent[x]);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int test_case = Integer.parseInt(br.readLine());
for(int t = 0; t < test_case; t++) {
int n = Integer.parseInt(br.readLine());
parent = new int[n];
ArrayList<Point> plist = new ArrayList<>();
for(int i = 0; i < n; i++) {
String[] s = br.readLine().split(" ");
parent[i] = i;
plist.add(new Point(Integer.parseInt(s[0]), Integer.parseInt(s[1]), Integer.parseInt(s[2])));
}
for(int i = 0; i < n-1; i++) {
for(int j = i + 1; j < n; j++) {
int distance = (int)(Math.pow(plist.get(i).x - plist.get(j).x, 2) + Math.pow(plist.get(i).y - plist.get(j).y, 2));
if(distance <= (int)Math.pow(plist.get(i).r + plist.get(j).r, 2)) {
//System.out.println(i + " " + j);
union(i, j);
}
}
}
ArrayList<Integer> cnt = new ArrayList<>();
for(int i = 0; i < n; i++) {
int p = find(i);
if(!cnt.contains(p)){
cnt.add(p);
}
}
bw.write(cnt.size() + "\n");
bw.flush();
}
br.close();
bw.close();
}
}
반응형
'코딩 문제 풀이 > 백준' 카테고리의 다른 글
[백준] 자바 문제 풀이 16724 : 골드3 (0) | 2023.09.21 |
---|---|
[백준] 자바 문제 풀이 4195 : 골드2 (0) | 2023.09.21 |
[백준] 자바 문제 풀이 1918 : 골드2 (0) | 2023.09.20 |
[백준] 자바 문제 풀이 17144 : 골드4 (0) | 2023.09.20 |
[백준] 자바 문제 풀이 13904 : 골드3 (0) | 2023.09.20 |