https://www.acmicpc.net/problem/2606
2606번: 바이러스
첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어
www.acmicpc.net
문제
접근
네트워크에 대한 입력값들을 이차원 배열에 담고,
방문여부를 체크할 Bool 배열을 선언하여 dfs를 구현해주었다.
풀이
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int com = sc.nextInt();
int idx = sc.nextInt();
int networks[][] = new int[idx][2];
for(int i=0;i<idx;i++) {
networks[i][0] = sc.nextInt();
networks[i][1] = sc.nextInt();
}
Boolean flag[] = new Boolean[com];
Arrays.fill(flag, false);
dfs(1,flag,networks);
int ans=0;
for(Boolean a : flag)
if(a) ans++;
System.out.println(ans-1);
}
private static void dfs(int idx, Boolean[] flag,int networks[][]) {
flag[idx-1] = true;
for(int i=0;i<networks.length;i++) {
if(!flag[networks[i][1]-1] && networks[i][0] == idx) dfs(networks[i][1],flag, networks);
if(!flag[networks[i][0]-1] && networks[i][1] == idx) dfs(networks[i][0],flag, networks);
}
}
}
1번에서 부터 시작해서 감염될때마다 flag에 설정을 해준다.
설정해줌과 동시에 count를 해주도록 만들면 몇줄을 더 줄일수 있을것 같다.
'Algorithm > Weekly Solved' 카테고리의 다른 글
[KAKAO 2021] 합승 택시 요금 - Java 코드 (Dijkstra) ★★★★ (0) | 2022.01.19 |
---|---|
[백준 1753] 최단경로 -Java코드 (Dijkstra)★★★ (0) | 2022.01.19 |
[2021 KAKAO] 순위검색 - Java코드 (0) | 2021.12.06 |
[백준 1920] 수찾기 - Java코드 (0) | 2021.12.06 |
[2021 KAKAO] 메뉴 리뉴얼 - Java코드 ★★★ (0) | 2021.11.30 |