이번 글에서는 최단 경로 문제집 안에 있는 바이러스라는 문제를 해결해보도록 하겠습니다.
알고리즘 설계는 다음과 같이 하였습니다. 함수를 재귀적으로 호출하여 전파되어 있는 컴퓨터의 수를 찾는 방식입니다.
코드는 다음과 같습니다
#include <stdio.h>
#include <stdbool.h>
bool a[1000][1000]; //컴퓨터 정보 배열
bool visited[1000]; //방문 정보 배열
int cnt = 0;
void f(int start, int comcnt) { //함수
visited[start] = true; //방문 정보 확인
cnt++; //카운트 증가
for (int i = 1; i <= comcnt; i++) { //컴퓨터의 수만큼 탐색
if (a[start][i] && !visited[i]) { //호출 조건
f(i, comcnt); //재귀 호출
}
}
}
int main() {
int comcnt,concnt;
scanf("%d",&comcnt); //컴퓨터 수 입력
scanf("%d",&concnt); //연결 수 입력
for (int i= 0; i <concnt; i++) { //연결 정보 입력
int com1, com2;
scanf("%d %d", &com1, &com2);
a[com1][com2] = true; //연결정보 저장
a[com2][com1] = true; //연결정보 저장
}
f(1, comcnt); //함수 호출
printf("%d",cnt-1); //전파 수 출력
}
처음에 컴퓨터의 연결 정보를 저장하는 배열을 100x100 사이즈로 선언하였더니 테스트 케이스 4번에서 막혔습니다. 그래서 이것을 데이터 저장 공간의 부족이라고 생각하여 배열을 1000x1000으로 변경하였더니 문제가 해결되었습니다.
글을 읽어주셔서 감사합니다.
'AP 프로그래밍' 카테고리의 다른 글
13. codeup 3701 : 파스칼 삼각형 문제 해결 (1) | 2023.06.05 |
---|---|
12. codeup 2601 : 피보나치 수열 문제 해결 (0) | 2023.06.05 |
9. codeup 2641 : 숏다리의 계단 오르기 (Small) 문제 해결 (0) | 2023.05.28 |
8. codeup 2608 : 동아리 회장 선거 문제 해결 (0) | 2023.05.28 |
5. codeup 2062 : Up 2 문제 해결 (0) | 2023.04.03 |