1. 개요
아주 기본적인 BFS로 풀 수 있는 간단한 문제이다. 이 문제가 잘 안 풀리는 사람은 BaaaaaaaaarkingDog님의 그래프 강의를 보고 오길 바란다.
실버 3도 식은 땀 흘리며 풀었다... 재활운동 시작!
내가 한번 틀렸었는데, 이유는 양방향 그래프임을 생각해주지 않고 풀어서 이다. 이론 정리 다시 해야겠다.
2. 소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int V = Integer.parseInt(br.readLine());
int E = Integer.parseInt(br.readLine());
boolean [] isVisited = new boolean[V+1];
int virusCnt = 0;
// 1) 인접 리스트 만들기
ArrayList<Integer> [] lists = new ArrayList[V+1];
// 2) 인접 리스트 초기화
for (int i = 0; i < lists.length; i++) {
lists[i] = new ArrayList<>();
}
for (int i = 0; i < E; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int from = Integer.parseInt(st.nextToken());
int to = Integer.parseInt(st.nextToken());
lists[from].add(to);
lists[to].add(from);
}
// 3) BFS 시작
ArrayDeque<Integer> aq1 = new ArrayDeque<>();
// 4) 맨 처음 넣는 1의 경우 방문 처리 해주기
aq1.add(1);
isVisited[1] = true;
while(!aq1.isEmpty()) {
int now = aq1.poll();
for (int i = 0; i < lists[now].size(); i++) {
if(!isVisited[lists[now].get(i)]){
aq1.add(lists[now].get(i));
isVisited[lists[now].get(i)] = true;
virusCnt++;
}
}
}
System.out.printf("%d", virusCnt);
}
}
'알고리즘 > 문제 풀이' 카테고리의 다른 글
💜 2589 보물섬 (0) | 2024.03.06 |
---|---|
💜 2667번 단지 번호 붙이기 JAVA (0) | 2024.03.02 |
💔 9663 N-Queen java (0) | 2024.01.11 |
💔5525번 IOIOI (0) | 2024.01.05 |
💔전깃줄 (0) | 2024.01.05 |