실버 1
https://www.acmicpc.net/problem/1325
문제 접근
문제 풀이
result = 해킹한 컴퓨터수를 저장하는 배열
visit = 방문 여부 배열
list = 입력값 저장하는 인접리스트
인접리스트를 먼저 초기화하고 입력값을 넣는다.
각 노드마다 BFS를 수행하며 노드별 해킹 컴퓨터 수를 저장하고, max값을 찾는다.
들어온 값을 큐에 넣고, 방문처리
큐가 비어있지 않을 때
큐에서 값을 하나 빼준다.
그 값에 해당하는 리스트를 반복문 돌려준다.
방문하지 않는 요소라면 방문처리, 큐에 요소 넣기, count++
max 값과 값이 동일한 노드를 출력한다.
package 그래프탐색;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class BOJ1325 {
static boolean[] visit;
static int max = Integer.MIN_VALUE;
static int n, m;
static int count;
static ArrayList<ArrayList<Integer>> list = new ArrayList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
for(int i=0;i<=n;i++){
list.add(new ArrayList<>());
}
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
list.get(b).add(a);
}
int[] result = new int[n + 1];
for (int i = 1; i <= n; i++) {
visit = new boolean[n + 1];
count = 0;
bfs(i);
result[i] = count;
max = Math.max(count, max);
}
for (int i = 1; i <= n; i++) {
if (result[i] == max)
sb.append(i+" ");
}
System.out.println(sb);
}
public static void bfs(int x) {
Queue<Integer> q = new LinkedList<>();
q.add(x);
visit[x] = true;
while (!q.isEmpty()) {
int v = q.poll();
for(int i : list.get(v)){
if(!visit[i]){
q.add(i);
visit[i] = true;
count++;
}
}
}
}
}
이거 시간초과 나는데요?