ALGORITHM/BOJ
[백준] 10159 저울
0298
2021. 8. 31. 23:38
https://www.acmicpc.net/problem/10159
10159번: 저울
첫 줄에는 물건의 개수 N 이 주어지고, 둘째 줄에는 미리 측정된 물건 쌍의 개수 M이 주어진다. 단, 5 ≤ N ≤ 100 이고, 0 ≤ M ≤ 2,000이다. 다음 M개의 줄에 미리 측정된 비교 결과가 한 줄에 하나씩
www.acmicpc.net
2021-08-31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N, M;
static int[][] dist;
public static void main(String[] args) throws Exception{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine().trim());
N = Integer.parseInt(st.nextToken());
st = new StringTokenizer(bf.readLine().trim());
M = Integer.parseInt(st.nextToken());
dist = new int[N][N];
for(int i = 0; i < N; i++) {
for(int j = 0; j < N; j++) {
if(i == j) continue;
dist[i][j] = 987654321;
}
}
for(int i = 0; i < M; i++) {
st = new StringTokenizer(bf.readLine());
int a = Integer.parseInt(st.nextToken()) - 1;
int b = Integer.parseInt(st.nextToken()) - 1;
dist[a][b] = 1;
}
for(int mid = 0; mid < N; mid++) {
for(int start = 0; start < N; start++) {
for(int end = 0; end < N; end++) {
if(dist[start][end] > dist[start][mid] + dist[mid][end]) {
dist[start][end] = dist[start][mid] + dist[mid][end];
}
}
}
}
int[] ans = new int[N];
for(int i = 0; i < N; i++) {
for(int j = 0; j < N; j++) {
if(i == j) continue;
if(dist[i][j] == 987654321 && dist[j][i] == 987654321) ans[i]++;
}
}
for(int i = 0; i < N; i++) {
System.out.println(ans[i]);
}
}
}
|
cs |
#문제풀이
https://void2017.tistory.com/317?category=820802
[프로그래머스] 순위
https://programmers.co.kr/learn/courses/30/lessons/49191 코딩테스트 연습 - 순위 5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2 programmers.co.kr 2021-08-30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18..
void2017.tistory.com
어제 푼 이 문제 때문에 풀었다. 완전 똑같은 문제더라..