![[백준 2606번 / Java] 바이러스](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblaJn9%2FbtslLE36Vz4%2F0XfAukATk7rnlk9yVTYwDk%2Fimg.png)
[백준 2606번 / Java] 바이러스P.S./백준2023. 7. 1. 10:13
728x90
728x90
문제 링크
https://www.acmicpc.net/problem/2606
2606번: 바이러스
첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍
www.acmicpc.net
풀이
DFS, BFS 둘 다 가능했지만, BFS에 조금 미숙하여 BFS로 진행하였다.
난이도가 쉬운 문제라 (실버 3?) 구현에 어려움은 없었다.
1에서 시작하여, chk와 연결되어있는 노드들의 방문여부를 체크하여 미방문 시 cnt++
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
class BaekJoon2606{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int computer = Integer.parseInt(br.readLine());
int connection = Integer.parseInt(br.readLine());
int[][] node = new int[computer + 1][computer + 1];
int[] arr = new int[computer + 1];
StringTokenizer st;
arr[1] = 1;
for(int i = 0; i < connection; i++) {
st = new StringTokenizer(br.readLine(), " ");
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
node[a][b] = node[b][a] = 1;
}
int cnt = 0;
Queue<Integer> queue = new LinkedList<>();
queue.add(1);
while(!queue.isEmpty()) {
int chk = queue.poll();
for(int i = 1; i < arr.length; i++) {
if(node[chk][i] == 1 && arr[i] != 1) {
cnt++;
arr[i] = 1;
queue.add(i);
}
}
}
System.out.println(cnt);
}
private static void union(int a, int b, int[] node) {
a = find(a, node);
b = find(b, node);
if(a != b) node[b] = a;
}
private static int find(int a, int[] node) {
if(node[a] == a) return a;
else return node[a] = find(node[a], node);
}
}
728x90
300x250
@mag1c :: 꾸준히 재밌게
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!