Skip to content

Commit 30eb3fb

Browse files
authored
Merge pull request #160 from AlgorithmWithGod/03do-new30
[20250220] BOJ / G4 / 키 순서 / 신동윤
2 parents 59e1783 + c410a3d commit 30eb3fb

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
```java
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
7+
final static int INF = 501;
8+
public static void main(String[] args) throws IOException {
9+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10+
StringTokenizer st = new StringTokenizer(br.readLine());
11+
12+
// [start] 입출력
13+
int N = Integer.parseInt(st.nextToken()); // 정점의 개수
14+
int M = Integer.parseInt(st.nextToken()); // 엣지의 개수
15+
16+
int[][] dist = new int[N+1][N+1];
17+
for (int i = 0; i < N+1; i++) {
18+
for (int j = 0; j < N+1; j++) {
19+
if (i == j) { dist[i][j] = 0; continue;} // 자기 자신으로 가는 비용 0
20+
dist[i][j] = INF; // 초기값: 도달할 수 없음으로 설정
21+
}
22+
}
23+
for (int i = 0; i < M; i++) {
24+
st = new StringTokenizer(br.readLine());
25+
int u = Integer.parseInt(st.nextToken());
26+
int v = Integer.parseInt(st.nextToken());
27+
dist[u][v] = 1;
28+
}
29+
// [end] 입출력
30+
31+
// Floyd-Warshall
32+
for (int mid = 1; mid < N+1; mid++) {
33+
for (int start = 1; start < N+1; start++) {
34+
for (int end = 1; end < N+1; end++) {
35+
dist[start][end] = Integer.min(dist[start][end], dist[start][mid] + dist[mid][end]);
36+
}
37+
}
38+
}
39+
int answer = 0;
40+
for (int target = 1; target < N+1; target++) {
41+
int lower = 0;
42+
int higher = 0;
43+
for (int k = 1; k < N+1; k++) {
44+
if (target == k) { continue; } // 자기 자신과의 경로는 패스
45+
if (dist[k][target] != INF) {
46+
lower++;
47+
}
48+
if (dist[target][k] != INF) {
49+
higher++;
50+
}
51+
}
52+
if (lower + higher == N-1) {
53+
answer++;
54+
}
55+
}
56+
System.out.println(answer);
57+
58+
br.close();
59+
}
60+
}
61+
62+
```

0 commit comments

Comments
 (0)