import java.io.*;
import java.util.*;
public class Main {
public static ArrayList<Integer>[] A;
public static boolean[] visited;
public static int[] count;
public static int N, M;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //선언
//입력값 받기
StringTokenizer stringTokenizer = new StringTokenizer(br.readLine());
N = Integer.parseInt(stringTokenizer.nextToken());
M = Integer.parseInt(stringTokenizer.nextToken());
//초기화
count = new int[N + 1];
A = new ArrayList[N + 1];
for (int i = 1; i <= N; i++) {
A[i] = new ArrayList<>();
}
//양방향 엣지 연결
for (int i = 0; i < M; i++) {
stringTokenizer = new StringTokenizer(br.readLine());
int S = Integer.parseInt(stringTokenizer.nextToken());
int E = Integer.parseInt(stringTokenizer.nextToken());
A[S].add(E);
}
//탐색 통해서 확인 후, count 배열에 기록
for (int i = 1; i <= N; i++) {
visited = new boolean[N + 1];
BFS(i);
}
int max = Arrays.stream(count).max().getAsInt();
PriorityQueue<Integer> answer = new PriorityQueue<>();
for (int i = 1; i <= N; i++) {
if (count[i] == max) answer.add(i);
}
String str = "";
for(int s : answer){
str += s + " ";
}
System.out.println(str);
}
public static void BFS(int X) {
Queue<Integer> queue = new LinkedList<>();
queue.add(X);
visited[X] = true;
while (!queue.isEmpty()) {
int now = queue.poll();
for (int a : A[now]) {
if (!visited[a]) {
queue.add(a);
visited[a] = true;
count[a]++;
}
}
}
}
}
SQL 노랭이 30문제 풀이 완료.
2장 들어가니까 확실히 난이도가 올라갔다.
다음주 SQLD 시험 무조건 한 번에 뽀사야지,,★
다음주에 첫 면접을 보게 되었다.
떨리기도 하고, 잘 준비해서 봐봐야겠다.
첫 술에 배부를 수는 없으니 너무 긴장하지 말아야지.
며칠 전 특강을 듣기 정말 잘했다.
이미 알고 있는 말이든, 세간에 퍼진 당연한 말이든, 그 말이 내게 와닿는 순간은 언제나 불규칙하다.
어딜 가든 하기 나름이라는 말씀 덕분에, 더 담대해졌다.
그래서 오늘 이력서 6개 더 제출했다.
느슨해진 생활패턴도 바로 잡고, 공부를 좀 더 부지런히 해야겠다.