알고리즘

[백준, 자바, 2606번] 바이러스

hminor 2024. 9. 6. 16:31

풀이

  • 따로 어려운 부분은 없고 단순하게 bfs로 해결 가능한 문제
  • 여기서 다시 기억해둘 것으로 2가지는
    • IntStream.rangeClosed() 에는 map이 아닌 mapToObj인 것
    • Collections로 생성한 배열에 초기 값을 넣어줄 땐 () 안에 Arrays.asList로 추가 가능하다는 것.

 

import java.io.*;
import java.util.*;
import java.util.stream.*;
public class _2606 {
    static List<List<Integer>> nodes;
    static boolean[] visit;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int net = Integer.parseInt(br.readLine());

        nodes = IntStream.rangeClosed(0,N).mapToObj(ArrayList<Integer>::new).collect(Collectors.toList());

        for (int i=0; i<net; i++) {
            int[] node = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
            nodes.get(node[0]).add(node[1]);
            nodes.get(node[1]).add(node[0]);
        }

        visit = new boolean[N+1];

        // bfs
        Deque<Integer> queue = new ArrayDeque<>(){{
            add(1);
        }};
        visit[1] = true;
        System.out.println(bfs(queue));

    }

    public static int bfs(Deque<Integer> queue){
        int cnt = 0;
        while (!queue.isEmpty()) {
            int now = queue.pollFirst();

            for (int num: nodes.get(now)) {
                if (!visit[num]) {
                    queue.add(num);
                    visit[num] = true;
                    cnt++;
                }
            }
        }
        return cnt;
    }
}