728x90
SMALL
백준 문제 풀이: 2606 [바이러스]
문제 링크: https://www.acmicpc.net/problem/2606
문제 설명:
네트워크 상에서 1번 컴퓨터가 바이러스에 감염되었을 때, 1번 컴퓨터로부터 바이러스가 전파될 수 있는 컴퓨터의 수를 구하는 문제입니다. 컴퓨터들은 양방향 연결이 가능하며, 연결 정보를 통해 감염 전파를 추적해야 합니다.
문제 해결 코드
// 백준 2606 - 바이러스
#include <iostream>
#include <vector>
using namespace std;
int visited[101]; // 방문 여부를 저장
vector graph[101]; // 연결 정보를 저장
int countInfected = 0; // 감염된 컴퓨터 수
void DFS(int node) {
// 이미 방문한 노드라면 리턴
if (visited[node]) return;
visited[node] = 1; // 현재 노드 방문 처리
countInfected++; // 감염된 컴퓨터 수 증가
// 연결된 모든 노드에 대해 DFS 수행
for (int neighbor : graph[node]) {
DFS(neighbor);
}
}
int main() {
int n, k;
cin >> n >> k;
// 연결 정보 입력
for (int i = 0; i < k; i++) {
int a, b;
cin >> a >> b;
graph[a].push_back(b);
graph[b].push_back(a); // 양방향 연결
}
DFS(1); // 1번 컴퓨터부터 DFS 시작
cout << countInfected - 1 << '\n'; // 1번 컴퓨터 제외 감염된 컴퓨터 수 출력
return 0;
}
코드 설명
코드의 주요 로직과 사용된 알고리즘 설명.
- 핵심 알고리즘:
- DFS(깊이 우선 탐색)을 사용하여 그래프를 탐색하며 감염된 컴퓨터 수를 계산합니다.
- 구현 세부사항:
graph
: 연결 리스트 형태로 컴퓨터 간의 연결 정보를 저장합니다.visited
: 특정 컴퓨터가 이미 감염되었는지 여부를 확인합니다.DFS
: 1번 컴퓨터를 시작으로 연결된 모든 컴퓨터를 재귀적으로 방문합니다.
- 시간 복잡도 분석:
- DFS 탐색: O(V + E), 여기서 V는 컴퓨터 수, E는 연결 정보의 수입니다.
- 총 시간 복잡도: O(V + E)
결과
제출 시, 모든 테스트 케이스에 대해 올바른 결과를 출력합니다.
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 그래프' 카테고리의 다른 글
백준 1189번 [컴백홈](C++) -yes6686- 티스토리 (0) | 2024.11.17 |
---|---|
백준 18243번 [Small World Network](C++) -yes6686- 티스토리 (0) | 2024.08.31 |
백준 2660번 [회장뽑기](C++) -yes6686- 티스토리 (0) | 2024.08.17 |
백준 14940번 [쉬운 최단거리](C++) -yes6686- 티스토리 (0) | 2024.08.15 |
백준 18405번 [경쟁적 전염](C++) -yes6686- 티스토리 (0) | 2024.07.13 |