[백준] 13023 ABCDE.Java

조청유과·2023년 5월 26일
0

BOJ

목록 보기
48/128

문제

BOJ 알고리즘 캠프에는 총 N명이 참가하고 있다. 사람들은 0번부터 N-1번으로 번호가 매겨져 있고, 일부 사람들은 친구이다.

오늘은 다음과 같은 친구 관계를 가진 사람 A, B, C, D, E가 존재하는지 구해보려고 한다.

  • A는 B와 친구다.
  • B는 C와 친구다.
  • C는 D와 친구다.
  • D는 E와 친구다.

위와 같은 친구 관계가 존재하는지 안하는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 사람의 수 N (5 ≤ N ≤ 2000)과 친구 관계의 수 M (1 ≤ M ≤ 2000)이 주어진다.

둘째 줄부터 M개의 줄에는 정수 a와 b가 주어지며, a와 b가 친구라는 뜻이다. (0 ≤ a, b ≤ N-1, a ≠ b) 같은 친구 관계가 두 번 이상 주어지는 경우는 없다.

출력

문제의 조건에 맞는 A, B, C, D, E가 존재하면 1을 없으면 0을 출력한다.

Java

import java.util.*;
import java.io.*;
public class Main {
    static int N, M, cnt=0;
    static ArrayList<Integer>[] arr;
    static boolean[] visited;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        arr = new ArrayList[N];
        for (int i = 0; i < N; i++) {
            arr[i] = new ArrayList<>();
        }
        visited = new boolean[N];
        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());
            arr[x].add(y);
            arr[y].add(x);
        }

        for (int i = 0; i < N; i++) {
            if (cnt == 0) { // 1이라면 굳이 할 필요X.
                DFS(i, 1);
            }
        }
        System.out.println(cnt);

    }
    public static void DFS(int v, int depth) {
        visited[v] = true;
        if (depth == 5) { // 친구 사이클 형성.
            cnt = 1;
            return;
        }
        for (int i: arr[v]) {
            if (!visited[i]) {
                DFS(i, depth+1);
            }
        }
        visited[v] = false;
    }


}
  • 사람의 수 N이 5이상이란 말은 최소한 5명이 친구관계가 성립되어야 한다는 말이다.
  • depth로 계속 들어가기 위해 뒤에 visited[v] = false 추가.

0개의 댓글