티스토리 뷰

알고리즘/백준

백준 13023 (ABCDE) - java

김다미김태리신시아 2023. 2. 13. 01:27

https://www.acmicpc.net/problem/13023

 

13023번: ABCDE

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

www.acmicpc.net

import java.io.*;
import java.util.*;

public class Main {
    static int n = 0;
    static int m = 0;
    static ArrayList<ArrayList<Integer>> board= new ArrayList<>();
    static boolean[] visit = new boolean[2001];
    static boolean result = false;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());

        for(int i=0;i<n;i++)
        {
            board.add(new ArrayList<>());
        }

        for(int i=1;i<=m;i++)
        {
            st = new StringTokenizer(br.readLine()," ");
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());

            board.get(x).add(y);
            board.get(y).add(x);
        }
        
        // i 번째 친구를 시작으로 4번 관계가 지속되는지 탐색
        for(int i=0;i<n;i++)
        {
            if(!result)
            {
                visit[i] = true;
                dfs(i,0);
                visit[i] = false;
            }
        }

        if(result)
        {
            System.out.println(1);
        }
        else{
            System.out.println(0);
        }
        br.close();
    }
    
    // 깊이 우선 탐색
    static void dfs(int x,int num)
    {
        if(result)
            return;

        if(x>n-1)
            return;
        
        // 친국 관계가 4번 지속될 경우 문제 조건 만족
        if(num==4)
        {
            result = true;
            return;
        }
        
        // x번째 친구와 연결된 모든 친구를 대상으로 탐색
        for(int y : board.get(x))
        {
            if(!visit[y])
            {
                visit[y] = true;
                dfs(y,num+1);
                visit[y] = false;
            }
        }
    }
}

평범한 dfs 문제이다. 입력의 수가 많기 때문에  ArrayList를 사용해야한다.