[백준] 2606: 바이러스 - Java (그래프 이론)
Algorithm/BackJun 2024. 1. 11.
목 차
- 문제
- 접근 방식
- 이 문제를 구현하며 알게된 것들
- 풀이
문제
접근 방식
BFS Lover 인 나는 이 문제를 보았을 때 바로 BFS가 적합하다고 느꼈다.
BFS 방식이 언제나 그렇듯 하나씩 하나씩 근접한 값들을 큐에 넣어 돌리면 된다.
이 문제에서 주의할 점만 알면 30분 내로 풀 수 있는 문제인 것 같다.
그 주의할 점은 바로.. 입력 값 한 쌍이 들어왔을 때, 한 쪽에만 값을 저장하는 행위이다.
예를 들면,
4
3
1 2
2 4
3 2
여기서 앞 쪽 숫자를 a 변수에, 뒤 쪽 숫자를 b 변수에 할당한다고 가정해 보자.
만약 graph[a].add(b); 만 하게된다면, 1, 2, 4는 연결이 되고, 3또한 연결이 되어있지만 출력 값에서는 낙오되는 현상을 볼 수 있다.
이 문제를 구현하며 알게된 것들
저번 미로 탐색 부분에서는 배열 Queue 를 사용해서 문제를 구현하였는데, 알고보니 java.util 에서 제공하는 Queue 가 쓸만하다는 것을 느꼈다. 가독성에서나 성능에서나 전혀 뒤쳐지지 않는다. 애용해야 겠다.
알고리즘 문제를 풀면 그 언어에 대한 이해도가 점점 깊어지는 것이 느껴진다. 비록 지금은 낮지만 계속해서 땅을 파서 내려가자.
풀이
설계 내용
package src.graph;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.List;
import java.util.StringTokenizer;
public class Virus {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int m = Integer.parseInt(br.readLine());
List[] computers = new List[n+2];
for(int i = 0; i <= n; i++){
computers[i] = new ArrayList<>();
}
boolean[] isVisited = new boolean[n+2];
// 입력 && 분류
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());
computers[a].add(b);
computers[b].add(a);
}
Queue<Integer> queue = new LinkedList<>();
queue.add(1);
while(!queue.isEmpty()){
int computer = queue.remove();
isVisited[computer] = true;
for(Object com : computers[computer]){
int curCom = (int) com;
if(isVisited[curCom]) continue;
queue.add(curCom);
isVisited[curCom] = true;
}
}
int answer = 0;
for(boolean el : isVisited){
if(el == true) {
answer = answer + 1;
}
}
System.out.println(answer - 1);
}
}
'Algorithm > BackJun' 카테고리의 다른 글
[백준] 1912: 연속합 - Java (DP) (0) | 2024.01.15 |
---|---|
[백준] 11727: 2 * n 타일링2 - Java (DP) (0) | 2024.01.14 |
[백준] 2178: 미로 탐색 - Java (그래프 이론) (0) | 2024.01.11 |
[백준] 1932: 정수 삼각형 - Java (DP) (0) | 2024.01.11 |
[백준] 11726: 2 * n 타일링 - Java (DP) (0) | 2024.01.07 |