알고리즘/백준 알고리즘(JAVA)
JAVA)13023번 ABCED - 그래프(인접 행렬, 인접 리스트, 간접 리스트)
starmk95
2020. 8. 17. 15:57
import java.util.*;
class Edge { // 간접 리스트를 위한 클래스
int from, to;
Edge(int from, int to) {
this.from = from;
this.to = to;
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 사람 수
int m = sc.nextInt(); // 관계 수
boolean[][] a = new boolean[n][n]; // 인접 행렬 구현
ArrayList<Integer>[] g = (ArrayList<Integer>[]) new ArrayList[n]; // 인접 리스트 구현
ArrayList<Edge> edges = new ArrayList<Edge>(); // 간접 리스트 구현
for (int i=0;i<n;i++) { // 인접 리스트는 각 정점마다 연결된 간선을 저장하므로
g[i] = new ArrayList<>(); // 각 정점에 대해 리스트를 할당
}
for (int i=0; i<m; i++) {
// 친구 관계는 양방향 관계이므로 양 방향으로 간선을 배정해야 한다.
// 간선 리스트에 관계 저장
int from = sc.nextInt();
int to = sc.nextInt();
edges.add(new Edge(from, to));
edges.add(new Edge(to, from));
// 인접 행렬에 관계 저장
a[from][to] = a[to][from] = true;
// 인접 리스트에 관계 저장
g[from].add(to);
g[to].add(from);
}
// 관계는 양방향이므로 입력된 관계*2를 해주어야 간선들의 총 개수가 된다.
m *= 2;
// 아래는 2개의 간선들에 대한 관계 파악해줌
for (int i=0;i<m;i++) {
for (int j=0;j<m;j++) {
// 간선리스트 사용
int A = edges.get(i).from;
int B = edges.get(i).to;
int C = edges.get(j).from;
int D = edges.get(j).to;
// B-C 친구 관계 여부를 간선 리스트로 확인
// 서로 다른 두 간선이 연결되어 있는지 확인
// A-B, C-D가 친구일 때 B-C가 친구인지 확인하는 것
if (A == B || A == C || A == D || B == C || B == D || C == D) {
// A==B이면 edges i는 간선이 아님
// A==C 또는 A==D는 간선 i와 j가 정점 1개를 공유하는 간선이라는 것이다.
// (서로 다른 정점 4개를 연결하는 간선이 아닌 것임)
continue; // 위 조건에 해당하면 A-B, C-D가 친구일 때 B-C가 친구인지 확인할 수 없으므로 continue (정점 4개에 대한 관계가 아니게 되기 때문)
}
// 인접 행렬 사용
if (!a[B][C]) continue; // A-B, C-D 에서 B-C 관계도 성립하지 않는다면 continue
// 인접 리스트 사용
for (int E : g[D]) { // D 정점과 연결된 정점들이 E로 들어온다.
if (A == E || B == E || C == E || D == E) continue;
// 연결된 정점이 A, B, C, D와 같다면 이는 중복되는 간선이 들어온 것이므로 continue
// (D-E 관계에 해당하지 않는다는 것)
// 위 조건들을 모두 통과하면 A-B-C-D-E 관계가 존재한다는 것이다.
System.out.println(1);
System.exit(0);
}
}
}
// 위 모든 쌍의 간선들을 확인했음에도 불구하고 모두 조건문에 걸려 continue 처리되어
// 해당 코드에 다다르면 A-B-C-D-E 관계가 성립하지 않는다는 것이다.
System.out.println(0);
}
}