본문 바로가기
코딩 문제 풀이/백준

[백준] 자바 문제 풀이 10216 : 골드4

by 코딩하는 랄로 2023. 9. 20.
728x90
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();
    }
}
728x90