ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • boj)13023 - ABCDE
    PS/boj 2020. 10. 29. 15:44
    import java.util.*;
    
    class Edge {
        int from, to;
        Edge(int from, int to) {
            this.from = from;
            this.to = to;
        }
    }
    
    public class boj_13023{
        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<Integer>();
            }
            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);
            }
            m *= 2; // 양방향 관계로 표시했으니 2배 해서 돌아야함
            for  (int i=0; i<m; i++) {
                for (int j=0; j<m; j++) {
                    int A = edges.get(i).from; // i
                    int B = edges.get(i).to;
    
                    int C = edges.get(j).from; // j
                    int D = edges.get(j).to;
                    if (A == B || A == C || A == D || B == C || B == D || C == D) {
                        continue; // 같은 값 제외
                    }
                    if (!a[B][C]) continue; // B와 C의 관계 체크
                    for (int E : g[D]) { // D의 인접리스트를 돌며 같은 값이 없으면 연결된것이 맞음
                        if (A == E || B == E || C == E || D == E) {
                            continue;
                        }
                        System.out.println(1);
                        System.exit(0);
                    }
                }
            }
            System.out.println(0);
        }
    }

     

    - 인접행렬, 인접리스트, 간접리스트 를 사용

    - 대부분의 경우는 인접리스트를 사용한다 -> 한 정점에 연결된 간선을 탐색하는 효율적인 측면에서 인접행렬보다 좋음

     

    'PS > boj' 카테고리의 다른 글

    boj)5014 - 스타트링크  (0) 2020.11.02
    boj)2146 - 다리 만들기  (0) 2020.11.02
    boj)2206 - 벽 부수고 이동하기  (0) 2020.10.24
    boj)2573 - 빙산  (0) 2020.10.24
    boj)1629 - 곱셈  (0) 2020.10.23
킹수빈닷컴