자료구조 & 알고리즘/BOJ

[java] 백준 1717번 문제(집합의 표현)

seungwook_TIL 2025. 5. 6. 22:29

원본 링크 : https://www.acmicpc.net/problem/1717


문제설명

 

 

소스코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Boj_1717
{
    static int[] parent;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken()); // 원소 수
        int m = Integer.parseInt(st.nextToken()); // 연산 수

        parent = new int[n + 1];
        for (int i = 1; i < n + 1; ++i) parent[i] = i; // 자기 자신으로 초기화

        for (int i = 0; i < m; ++i)
        {
            st = new StringTokenizer(br.readLine());
            int cmd = Integer.parseInt(st.nextToken());
            int nodeA = Integer.parseInt(st.nextToken());
            int nodeB = Integer.parseInt(st.nextToken());

            if (cmd == 0) union(nodeA, nodeB);
            else
            {
                if (find(nodeA) == find(nodeB)) sb.append("YES").append(System.lineSeparator());
                else sb.append("NO").append(System.lineSeparator());
            }
        }

        System.out.print(sb);
    }

    static int find(int value)
    {
        if (parent[value] != value) parent[value] = find(parent[value]);
        return parent[value];
    }

    static void union(int a, int b)
    {
        int rootA = find(a);
        int rootB = find(b);
        if (rootA != rootB)
        {
            if (rootA < rootB) parent[rootB] = rootA;
            else parent[rootA] = rootB;
        }
    }
}

 

설명

  • 최대 원소의 개수와 질의 개수를 고려해봤을 때 경로 압축이 필요한 전형적인 유니온 파인드 문제이다.
  • 유니온 파인드에 대한 설명은 아래의 링크로 확인 가능하다.

2025.05.06 - [자료구조 & 알고리즘/알고리즘] - [java] 유니온 파인드(Union-Find)

 

[java] 유니온 파인드(Union-Find)

이 글은 Do it! 알고리즘 코딩 테스트 - 자바편을 개인적으로 공부하고 정리하는 글임을 알립니다.유니온 파인드유니온 파인드는 여러 개의 원소들이 어떤 그룹(집합)에 속해 있는지를 빠르게 확

til.seungwook.com