https://www.acmicpc.net/problem/1325
문제
풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Set;
import java.util.StringTokenizer;
public class Main {
static boolean[] visited;
static ArrayList<Integer>[] matrix;
static int[] cnt;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int n = Integer.valueOf(st.nextToken());
int m = Integer.valueOf(st.nextToken());
matrix=new ArrayList[n+1];
cnt = new int[n+1];
for (int i = 1; i <= n; i++) {
matrix[i] = new ArrayList<Integer>();
}
for(int i=0; i<m; i++) {
st = new StringTokenizer(br.readLine(), " ");
int a = Integer.valueOf(st.nextToken());
int b = Integer.valueOf(st.nextToken());
matrix[a].add(b);
}
for(int i=1;i<=n;i++) {
visited = new boolean[n+1];
BFS(i);
}
int max=0;
for(int i=1;i<=n;i++) {
max = Math.max(max, cnt[i]);
}
for(int i=1;i<=n;i++) {
if(max == cnt[i]) System.out.print(i + " ");
}
}
public static void BFS(int i) {
Queue<Integer> q = new LinkedList<>();
q.offer(i);
visited[i] = true;
while(!q.isEmpty()) {
int curr=q.poll();
for(int idx: matrix[curr]) {
if(!visited[idx]) {
visited[idx]=true;
q.offer(idx);
cnt[idx]++;
}
}
}
}
}
회고
어떻게 해도 메모리초과, 시간초과가 나길래 다른 분들의 풀이를 봤는데, 낼 때마다 정답과 오답이 달라진다고 하더라고요. 무슨 그런 거짓말이 다있어~ 하면서 혹시나 하는 마음에 똑같은 코드를 다시 제출했더니.. 하.. 진짜.. 뭔 이런...
웬만한 그래프 탐색 문제는 BFS, DFS 방법 모두로 구현해보려고 했는데 이건 너무 피곤해서 그만 뒀습니다.. ㅋㅋ 지치는 문제네요.. DFS는 큐를 스택으로만 바꾸면 되니깐요..
'코딩테스트' 카테고리의 다른 글
[백준] 1111번 'IQ TEST' - Java (0) | 2024.08.26 |
---|---|
[프로그래머스] Lv1. 이웃한 칸 - Java (0) | 2024.08.24 |
[백준] 1105번 '팔' - Java (0) | 2024.08.21 |
[백준] 1012번 '유기농 배추' - Java (0) | 2024.08.19 |
[프로그래머스] Lv1. 붕대 감기 - Java (0) | 2024.08.18 |