본문 바로가기
알고리즘/너비 우선 탐색(bfs)

백준 5567번 : 결혼식 java

by LDY3838 2022. 7. 2.
반응형

이 문제는 친구관계를 입력받아서 결혼식에 올 사람들의 수를 구하는 문제입니다.

상근이의 학번은 1이고 자신의 친구들과 친구의 친구들을 결혼식에 부르려고 합니다.

따라서 입력들을 저장한 후 친구들과 친구의 친구들까지의 수를 세서 출력하면 됩니다.


import java.io.*;
import java.util.*;

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

        int N = Integer.parseInt(br.readLine());

        List<List<Integer>> l = new ArrayList<>();
        for(int i = 0; i<=N; i++)
            l.add(new ArrayList<>());

        int M = Integer.parseInt(br.readLine());
        for(int i = 0; i<M; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());

            int A = Integer.parseInt(st.nextToken());
            int B = Integer.parseInt(st.nextToken());

            l.get(A).add(B);
            l.get(B).add(A);
        }

        Queue<Integer> q = new LinkedList<>();
        int sum = 0;
        boolean[] visited = new boolean[N+1];
        visited[1] = true;

        //친구들을 확인
        for(int i = 0; i<l.get(1).size(); i++){
            int friend = l.get(1).get(i);

            if(visited[friend])
                continue;

            visited[friend] = true;
            sum++;
            q.offer(friend);
        }

        while(!q.isEmpty()){
            int friend = q.poll();

            for(int i = 0; i<l.get(friend).size(); i++){
                int friendFriend = l.get(friend).get(i);

                if(visited[friendFriend])
                    continue;

                sum++;
                visited[friendFriend] = true;
            }
        }

        System.out.println(sum);
    }
}
반응형

댓글