Skip to content

Commit bdea943

Browse files
committed
[Silver II] Title: DFS와 BFS, Time: 212 ms, Memory: 19916 KB -BaekjoonHub
1 parent b0c7479 commit bdea943

2 files changed

Lines changed: 56 additions & 59 deletions

File tree

Lines changed: 54 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,82 +1,79 @@
1-
2-
31
import java.io.BufferedReader;
4-
import java.io.IOException;
2+
import java.io.FileInputStream;
53
import java.io.InputStreamReader;
6-
import java.util.ArrayDeque;
7-
import java.util.Arrays;
8-
import java.util.Deque;
9-
import java.util.StringTokenizer;
4+
import java.util.*;
105

11-
class Main {
6+
public class Main {
127

13-
static int n, m, y;
14-
static int[][] graph;
15-
static boolean[] visited;
16-
static StringBuilder sb = new StringBuilder();
8+
private static StringBuilder sb = new StringBuilder();
179

18-
public static void main(String[] args) throws IOException {
19-
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
20-
StringTokenizer stringTokenizer = new StringTokenizer(reader.readLine());
21-
n = Integer.parseInt(stringTokenizer.nextToken());
22-
m = Integer.parseInt(stringTokenizer.nextToken());
23-
y = Integer.parseInt(stringTokenizer.nextToken());
10+
public static void main(String[] args) throws Exception {
11+
//System.setIn(new FileInputStream("input.txt")); // 제출 시 이 줄만 주석처리
12+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
13+
StringTokenizer st = new StringTokenizer(br.readLine());
2414

25-
graph = new int[n + 1][n + 1];
15+
int n = Integer.parseInt(st.nextToken());
16+
int m = Integer.parseInt(st.nextToken());
17+
int v = Integer.parseInt(st.nextToken());
2618

19+
List<Integer>[] graph = new ArrayList[n + 1];
20+
for (int i = 0; i <= n; i++) {
21+
graph[i] = new ArrayList<>();
22+
}
2723
for (int i = 0; i < m; i++) {
28-
stringTokenizer = new StringTokenizer(reader.readLine());
29-
int start = Integer.parseInt(stringTokenizer.nextToken());
30-
int end = Integer.parseInt(stringTokenizer.nextToken());
24+
st = new StringTokenizer(br.readLine());
25+
int from = Integer.parseInt(st.nextToken());
26+
int to = Integer.parseInt(st.nextToken());
3127

32-
graph[start][end] = 1;
33-
graph[end][start] = 1;
28+
graph[from].add(to);
29+
graph[to].add(from);
30+
}
31+
for (int i = 1; i <= n; i++) {
32+
Collections.sort(graph[i]);
3433
}
3534

36-
visited = new boolean[n + 1];
35+
//dfs
36+
List<Integer> temp = new ArrayList<>();
37+
boolean[] visited = new boolean[n + 1];
38+
visited[v] = true;
39+
dfs(v, graph, temp, visited);
40+
System.out.println(sb.substring(0, sb.length() - 1));
3741

38-
dfs(y);
39-
System.out.println(sb.toString());
40-
initVariables();
42+
//bfs
43+
sb.setLength(0);
44+
ArrayDeque<Integer> deque = new ArrayDeque<>();
45+
deque.offer(v);
46+
Arrays.fill(visited, false);
47+
visited[v] = true;
4148

42-
bfs(y);
43-
System.out.println(sb.toString());
44-
}
4549

46-
private static void dfs(int start) {
47-
visited[start] = true;
48-
sb.append(start + " ");
50+
while (!deque.isEmpty()) {
51+
int cur = deque.poll();
52+
sb.append(cur).append(" ");
4953

50-
for (int i = 0; i < n + 1; i++) {
51-
if (graph[start][i] == 1 && !visited[i]) {
52-
dfs(i);
54+
for (int adj : graph[cur]) {
55+
if (visited[adj]) {
56+
continue;
57+
}
58+
visited[adj] = true;
59+
deque.offer(adj);
5360
}
5461
}
62+
System.out.println(sb.substring(0, sb.length() - 1));
5563
}
5664

57-
private static void bfs(int start) {
58-
Deque<Integer> que = new ArrayDeque<>();
59-
visited[start] = true;
60-
que.offer(start);
61-
sb.append(start + " ");
65+
private static void dfs(int v, List<Integer>[] graph, List<Integer> temp, boolean[] visited) {
66+
sb.append(v).append(" ");
6267

63-
while (!que.isEmpty()) {
64-
Integer current = que.poll();
65-
66-
for (int adj = 0; adj < n + 1; adj++) {
67-
if (graph[current][adj] == 1 && !visited[adj]) {
68-
que.offer(adj);
69-
visited[adj] = true;
70-
sb.append(adj + " ");
71-
}
68+
for (Integer adj : graph[v]) {
69+
if (visited[adj]) {
70+
continue;
7271
}
72+
visited[adj] = true;
73+
temp.add(adj);
74+
dfs(adj, graph, temp, visited);
75+
temp.remove(temp.size() - 1);
7376
}
74-
}
7577

76-
private static void initVariables() {
77-
Arrays.fill(visited, false);
78-
sb.setLength(0);
7978
}
8079
}
81-
82-

백준/Silver/1260. DFS와 BFS/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44

55
### 성능 요약
66

7-
메모리: 24252 KB, 시간: 264 ms
7+
메모리: 19916 KB, 시간: 212 ms
88

99
### 분류
1010

1111
그래프 이론, 그래프 탐색, 너비 우선 탐색, 깊이 우선 탐색
1212

1313
### 제출 일자
1414

15-
2024년 11월 20일 21:53:08
15+
2026년 1월 20일 13:28:53
1616

1717
### 문제 설명
1818

0 commit comments

Comments
 (0)