import java.io.*;
import java.util.*;
public class Main {
public static ArrayList<Integer>[] map;
public static boolean[] visited;
public static int depth;
public static PriorityQueue<Integer> answer;
public static int N, M, K, X;
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());
K = Integer.parseInt(stringTokenizer.nextToken());
X = Integer.parseInt(stringTokenizer.nextToken());
//초기화
map = new ArrayList[N + 1];
for (int i = 1; i < N + 1; i++) {
map[i] = new ArrayList<>();
}
visited = new boolean[N + 1];
depth = 0;
//엣지 연결
for (int i = 0; i < M; i++) {
stringTokenizer = new StringTokenizer(br.readLine());
int S = Integer.parseInt(stringTokenizer.nextToken());
int E = Integer.parseInt(stringTokenizer.nextToken());
map[S].add(E);
}
//X에서 출발하여 BFS 최단거리가 K인 도시를 오름차순으로 출력. 없으면 -1 출력.
PriorityQueue bfs = BFS(X);
if (bfs.isEmpty()) System.out.println("-1");
for (int i = 0; i < bfs.size(); i++) {
System.out.println(bfs.poll());
}
}
private static PriorityQueue BFS(int X) {
answer = new PriorityQueue();
Queue<Integer> queue = new LinkedList<>();
queue.add(X);
visited[X] = true;
while (!queue.isEmpty()) {
int now = queue.poll();
if (queue.isEmpty()) depth++;
if (depth > K) break;
for (int i = 1; i < map.length; i++) {
if (!visited[i] && map[now].contains(i)) {
queue.add(i);
visited[i] = true;
if (depth == K) answer.add(i);
}
}
}
return answer;
}
}
import java.io.*;
import java.util.*;
public class Main {
public static ArrayList<Integer>[] map;
public static int[] visited;
public static PriorityQueue<Integer> answer;
public static int N, M, K, X;
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());
K = Integer.parseInt(stringTokenizer.nextToken());
X = Integer.parseInt(stringTokenizer.nextToken());
//초기화
map = new ArrayList[N + 1];
for (int i = 1; i < N + 1; i++) {
map[i] = new ArrayList<>();
}
visited = new int[N + 1];
for (int i = 1; i < N + 1; i++) {
visited[i] = -1;
}
//엣지 연결
for (int i = 0; i < M; i++) {
stringTokenizer = new StringTokenizer(br.readLine());
int S = Integer.parseInt(stringTokenizer.nextToken());
int E = Integer.parseInt(stringTokenizer.nextToken());
map[S].add(E);
}
//X에서 출발하여 BFS 최단거리가 K인 도시를 오름차순으로 출력. 없으면 -1 출력.
BFS(X);
answer = new PriorityQueue();
for(int i=0; i<=N; i++){
if(visited[i]==K) answer.add(i);
}
if(answer.isEmpty()) System.out.println("-1");
for(int a : answer){
System.out.println(a);
}
}
private static void BFS(int X) {
Queue<Integer> queue = new LinkedList<>();
queue.add(X);
visited[X]++;
while (!queue.isEmpty()) {
int now = queue.poll();
for (int i : map[now]) {
if (visited[i] == -1) {
queue.add(i);
visited[i] = visited[now] + 1;
}
}
}
}
}
$ java -jar SNAPSHOT.jar --spring.profiles.active=local
오전에 SQL 노랭이 공부 완료.
부트캠프 수료 후 약간의 휴식 기간을 가진 뒤, 다시 공부 및 취준을 병행한 지 약 한 달이 좀 넘었다.
이전에 배웠던 내용들을 다시 읽어보고 있는데, 오늘로 section3까지 다시 보기 성공.
이제 section4 하나 남았다.
section4까지 다 읽은 후에는 집에 있는 책 <자바 코딩 인터뷰 완벽 가이드> by 안겔 레오나르드 를 읽을 생각이다.
오늘 본 API 문서화는 RestDocs 관련해서 jmt practice 라든지, pre-project에서 많은 추억이 있어서, 읽으면서 그때 생각이 났다. 나도 팀원들도 같이 고생했던 기억.
내 벨로그와 깃헙 레포지토리에 들어가서 그 당시의 기록 및 코드를 다시 보기도 했다.
코딩테스트 준비는 너무 스트레스 받지 않고, 매일 하나씩만 푼다는 마음으로 해야겠다.