반응형
- 알고리즘 분류 : 플로이드-와샬
- 사용 언어 : JAVA
- 문제 요점
- 플로이드-와샬 알고리즘을 이용해서 비교할 수 없는 대상 갯수를 센다.
소스 설명은 주석을 참고해주세요.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int M = Integer.parseInt(br.readLine());
int[][] sheet = new int[N+1][N+1];
for(int i=0; i<M; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
int num1 = Integer.parseInt(st.nextToken());
int num2 = Integer.parseInt(st.nextToken());
sheet[num1][num2] = 1; // num1이 num2보다 무겁다
sheet[num2][num1] = -1; // num2가 num1보다 가볍다
}
for(int i=1; i<=N; i++) {
for(int from=1; from<=N; from++) {
for(int to=1; to<=N; to++) {
if(sheet[from][i] == 1 && sheet[i][to] == 1){
sheet[from][to] = 1;
sheet[to][from] = -1;
}
else if(sheet[from][i] == -1 && sheet[i][to] == -1){
sheet[from][to] = -1;
sheet[to][from] = 1;
}
}
}
}
StringBuilder sb = new StringBuilder();
for(int i=1; i<=N; i++) {
int cnt = 0;
for(int j=1; j<=N; j++) {
if(i==j) continue;
// 0 : 비교할 수 없는 물건
if(sheet[i][j] == 0) cnt++;
}
sb.append(cnt+"\n");
}
System.out.println(sb.toString());
}
}
반응형
'Algorithm' 카테고리의 다른 글
[BAEKJOON] 2467번 : 용액 (JAVA) (0) | 2023.04.02 |
---|---|
[BAEKJOON] 7490번 : 0 만들기 (JAVA) (0) | 2023.04.02 |
[BAEKJOON] 18223번 : 민준이와 마산 그리고 건우 (JAVA) (0) | 2023.04.01 |
[BAEKJOON] 2151번 : 거울 설치 (JAVA) (0) | 2023.03.31 |
[BAEKJOON] 2458번 : 키 순서 (JAVA) (0) | 2023.03.28 |