

-Code
import java.io.*;
import java.util.*;
public class BOJ24445 {
static boolean[] visited;
static int[] answer;
static ArrayList<ArrayList<Integer>> graph;
static int counter = 1;
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.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int r = Integer.parseInt(st.nextToken());
// visited와 answer 크기 셋팅
visited = new boolean[n + 1];
answer = new int[n + 1];
// graph 셋팅
graph = new ArrayList<>();
for (int i = 0; i <= n; i++) {
graph.add(new ArrayList<>());
}
// 정점 u, v 입력 받기
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
int u = Integer.parseInt(st.nextToken());
int v = Integer.parseInt(st.nextToken());
// 무방향 그래프 셋팅
graph.get(u).add(v);
graph.get(v).add(u);
}
// node의 nextNode들 내림차순 정렬
for (ArrayList<Integer> nexts : graph) {
nexts.sort(Comparator.reverseOrder());
}
// bfs 시작
bfs(r);
// 출력
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= n; i++) {
sb.append(answer[i]).append("\n");
}
System.out.println(sb);
}
private static void bfs(int node) {
// 첫노드 방문 순서 입력 및 방문 체크
answer[node] = counter++;
visited[node] = true;
// 덱 선언 및 첫 노드 담기
Deque<Integer> dq = new ArrayDeque<>();
dq.addLast(node);
// 덱이 빌때까지 반복
while (!dq.isEmpty()) {
// 현재 노드 꺼내기
int nowNode = dq.pollFirst();
// 현재 노드의 다음 노드들 탐색
for (int next : graph.get(nowNode)) {
// 방문 여부 확인
if (!visited[next]) {
// 다음 노드의 방문 순서 및 방문 체크
answer[next] = counter++;
visited[next] = true;
// 덱에 담아 꺼내서 탐색하도록 함
dq.addLast(next);
}
}
}
}
}'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 1260번 DFS와 BFS (0) | 2026.01.02 |
|---|---|
| [백준/Java] 2606번 바이러스 (0) | 2026.01.02 |
| [백준/Java] 24444번 알고리즘 수업 - 너비 우선 탐색 1 (0) | 2026.01.02 |
| [백준/Java] 24480번 알고리즘 수업 - 깊이 우선 탐색 2 (0) | 2026.01.02 |
| [프로그래머스/Java] 기능개발 (0) | 2026.01.02 |