본문 바로가기
Problem Solving/Baekjoon

[백준] 5567 결혼식 - Graph Theory / Java

by graycode 2022. 12. 7.

 문제 링크

 

5567번: 결혼식

예제 1의 경우 2와 3은 상근이의 친구이다. 또, 3과 4는 친구이기 때문에, 4는 상근이의 친구의 친구이다. 5와 6은 친구도 아니고, 친구의 친구도 아니다. 따라서 2, 3, 4 3명의 친구를 결혼식에 초대

www.acmicpc.net

 

 풀이 과정

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class Main {

    static List<Integer>[] graph;
    static boolean[] visit;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;

        int n = Integer.parseInt(br.readLine());
        int m = Integer.parseInt(br.readLine());

        graph = new ArrayList[n + 1];
        for (int i = 0; i <= n; i++)
            graph[i] = new ArrayList<>();

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

            graph[src].add(dest);
            graph[dest].add(src);
        }

        visit = new boolean[n + 1];
        visit[1] = true;

        dfs(1, 0);

        int res = 0;
        for (int i = 2; i <= n; i++) {
            if (visit[i])
                res++;
        }

        bw.write(String.valueOf(res));
        bw.flush();
    }

    private static void dfs(int src, int cnt) {
        if (cnt == 2)
            return;

        for (int dest : graph[src]) {
            visit[dest] = true;
            dfs(dest, cnt + 1);
        }
    }

}

 

댓글