728x90
런타임(인덱스 아웃) 에러가 떳었는데 문제는 배열사이즈 때문임. computer와 n 두개 받을때 혼동말것
import java.io.*;
import java.util.*;
public class Main {
public static int count = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int computer = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int[][] matrix = new int[computer+1][computer+1];
boolean[] visited = new boolean[computer+1]; /* 컴퓨터 개수 만큼 1차원 배열로 방문했는지 체크하면됨 */
for(int ii = 0 ; ii < n ; ii++)
{
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
/* 1은 연결되어있다는 의미고 양쪽방향 둘다 연결시켜준다. */
matrix[x][y] = 1;
matrix[y][x] = 1;
}
/* 1번 컴퓨터 시작 */
dfs(computer, 1, matrix, visited);
/* 1을 뺀 이유는 dfs에서 1번 컴퓨터부터 카운트되기때문임(제외시킬려고) */
System.out.println(count-1);
br.close();
}
public static boolean dfs(int computer, int start, int[][] matrix, boolean[] visited)
{
if(visited[start] == true) /* 방문했다면 탈출 */
return false;
visited[start] = true; /* 방문 체크 및 감염된 컴퓨터 개수 카운팅 */
count++;
for(int ii = 1 ; ii < computer+1 ; ii++)
{
if(matrix[start][ii] == 1) /* 루프를 돌아서 연결되어있다면 바이러스 감염시키러 들어간다 */
{
dfs(computer, ii, matrix, visited);
}
}
return true;
}
}
https://www.acmicpc.net/problem/2606
728x90
'코딩 테스트' 카테고리의 다른 글
11399번 ATM(자바, java) - 그리디 (0) | 2023.01.09 |
---|---|
2667번 단지번호붙이기(자바, java) - DFS (0) | 2023.01.09 |
프로그래머스 네트워크 - DFS (0) | 2023.01.09 |
프로그래머스 - 문자열 압축 (0) | 2023.01.09 |
이진탐색 샘플 (0) | 2023.01.09 |