알고리즘/백준
[S3] 바이러스 : Java : 2606 - BFS
nagrang
2023. 9. 17. 01:08
문제
2606번: 바이러스
첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍
www.acmicpc.net
접근 방법
1번 노드를 시작으로 그래프가 끊길 때까지 전체 탐색을 하면 되는 문제라서 BFS나 DFS 중 아무거나 써도 될 것 같았다.
그래서 잘 안써본 BFS로 구현해봤다!
알게된 점
큐를 구현할 때 LinkedList를 이용해도 된다.
- add : 맨 뒤에 요소를 삽입한다.
- poll : 맨 앞(제일 먼저 삽입된 요소) 요소를 제거 후 반환 한다.
코드
import java.awt.*;
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());
Graph graph = new Graph(n+1);
int edgeCount = Integer.parseInt(br.readLine());
for(int i=0; i< edgeCount; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
int v = Integer.parseInt(st.nextToken());
int w = Integer.parseInt(st.nextToken());
graph.addEdge(v,w);
}
System.out.println(graph.BFS(1));
}
}
class Graph{
int v;
LinkedList [] adj;
Graph(int v){
this.v = v;
adj = new LinkedList[v];
for(int i=0; i<v; i++){
adj[i] = new LinkedList();
}
}
void addEdge(int v, int w){
if(!adj[v].contains(w))
adj[v].add(w);
if(!adj[w].contains(v))
adj[w].add(v);
}
int BFS(int value){
int count = 0;
boolean [] visited = new boolean[v];
LinkedList<Integer> queue = new LinkedList<Integer>();
visited[value] = true;
queue.add(value);
while(!queue.isEmpty()){
int s = queue.poll();
Iterator<Integer> iterator = adj[s].iterator();
while (iterator.hasNext()){
int n = iterator.next();
if(!visited[n]){
count++;
queue.add(n);
visited[n]= true;
}
}
}
return count;
}
}