문제
역사, 그 중에서도 한국사에 해박한 세준이는 많은 역사적 사건들의 전후 관계를 잘 알고 있다. 즉, 임진왜란이 병자호란보다 먼저 일어났으며, 무오사화가 기묘사화보다 먼저 일어났다는 등의 지식을 알고 있는 것이다.
세준이가 알고 있는 일부 사건들의 전후 관계들이 주어질 때, 주어진 사건들의 전후 관계도 알 수 있을까? 이를 해결하는 프로그램을 작성해 보도록 하자.
입력
첫째 줄에 첫 줄에 사건의 개수 n(400 이하의 자연수)과 알고 있는 사건의 전후 관계의 개수 k(50,000 이하의 자연수)가 주어진다. 다음 k줄에는 전후 관계를 알고 있는 두 사건의 번호가 주어진다. 이는 앞에 있는 번호의 사건이 뒤에 있는 번호의 사건보다 먼저 일어났음을 의미한다. 물론 사건의 전후 관계가 모순인 경우는 없다. 다음에는 사건의 전후 관계를 알고 싶은 사건 쌍의 수 s(50,000 이하의 자연수)이 주어진다. 다음 s줄에는 각각 서로 다른 두 사건의 번호가 주어진다. 사건의 번호는 1보다 크거나 같고, N보다 작거나 같은 자연수이다.
출력
s줄에 걸쳐 물음에 답한다. 각 줄에 만일 앞에 있는 번호의 사건이 먼저 일어났으면 -1, 뒤에 있는 번호의 사건이 먼저 일어났으면 1, 어떤지 모르면(유추할 수 없으면) 0을 출력한다.
예제 입력 1 복사
5 5
1 2
1 3
2 3
3 4
2 4
3
1 5
2 4
3 1
예제 출력 1 복사
0
-1
1
10159번과 거의 유사했던 문제
앞설때 -1 아닐때 1
- java 풀이
import java.io.*;
import java.sql.Array;
import java.util.*;
import java.util.stream.Collectors;
public class Main {
private static int[][] graph = new int[501][501];
private static int INF = 1000000000;
private static int n;
private static int m;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
setting();
for (int i = 0; i < m; i++) {
int a, b;
a = sc.nextInt();
b = sc.nextInt();
graph[a][b] = 1;
graph[b][a] = -1;
}
floyd();
int s;
s = sc.nextInt();
for(int i = 0 ; i < s; i++){
int a,b;
a = sc.nextInt();
b = sc.nextInt();
if(graph[a][b] == 1) {
System.out.println(-1);
}
else if(graph[a][b] == -1){
System.out.println(1);
}else{
System.out.println(0);
}
}
}
public static void setting() {
for (int i = 1; i <= n; i++) {
graph[i][i] = 1;
}
}
public static void floyd() {
for (int k = 1; k <= n; k++) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (graph[i][k] == 1 && graph[k][j] == 1) {
graph[i][j] = 1;
}
if (graph[i][k] == -1 && graph[k][j] == -1) {
graph[i][j] = -1;
}
}
}
}
}
}
'Algorythms' 카테고리의 다른 글
백준 11400번 단절선 java 풀이 (1) | 2023.12.05 |
---|---|
백준 11266번 단절점 java 풀이 (0) | 2023.12.05 |
백준 1956번 운동 java 풀이 (1) | 2023.11.27 |
백준 10159번 저울 java 풀이 (0) | 2023.11.27 |
백준 11557번 Yangjojang of The Year c++ 풀이 (1) | 2023.11.25 |