[18352번] 특정 거리의 도시 찾기 ( 방문 배열을 int로 사용하여 값 추가 )

알쓸코딩·2023년 12월 31일
0

코테 문제들

목록 보기
72/113


방문 확인은 for-each문에서

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {

	static int N, M, K, X;
	static ArrayList<Integer>[] A;
	static int[] visited;

	static List<Integer> answer = new ArrayList<>();

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		st = new StringTokenizer(br.readLine());
		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
		K = Integer.parseInt(st.nextToken());
		X = Integer.parseInt(st.nextToken());

		A = new ArrayList[N + 1];
		visited = new int[N + 1];
		visited[0] = -1;

		for (int i = 1; i <= N; i++) {
			A[i] = new ArrayList<>();
			visited[i] = -1;
		}
		for (int i = 0; i < M; i++) {
			st = new StringTokenizer(br.readLine());
			int s = Integer.parseInt(st.nextToken());
			int e = Integer.parseInt(st.nextToken());
			A[s].add(e);
		}

		bfs(X);

		for (int i = 1; i <= N; i++) {
			if (visited[i] == K) {
				answer.add(i);
			}
		}

		if (answer.isEmpty()) {
			System.out.println(-1);
		} else {
			Collections.sort(answer);
			for (int n : answer) {
				System.out.println(n);
			}
		}

	}

	private static void bfs(int start) {
		Queue<Integer> queue = new LinkedList<>();
		queue.add(start);
		visited[start]++; //처음 시작 노드 = 0
		while (!queue.isEmpty()) {
			int now = queue.poll();
			for (int n : A[now]) {
				if (visited[n] != -1) {
					continue; //방문한 노드면 방문 안 함
				}
				visited[n] = visited[now] + 1;
				queue.add(n);
			}
		}


	}
}

profile
알면 쓸데있는 코딩 모음!

0개의 댓글