[백준 13023] ABCDE(Java)

최민길(Gale)·2023년 9월 19일
1

알고리즘

목록 보기
136/172

문제 링크 : https://www.acmicpc.net/problem/13023

이 문제는 dfs를 이용하여 풀 수 있습니다. 문제를 주의깊게 읽어보면 친구 관계를 가진 사람이 5명만 존재하면 된다는 것을 알 수 있습니다. 따라서 dfs로 깊이가 5가 되었을 경우 break 하는 방식으로 진행합니다. 여기서 주의할 점은 이미 발견한 이후 다른 탐색을 진행할 경우 시간 초과가 발생할 수 있으니 발견한 즉시 모든 탐색을 멈추고 바로 결과를 출력합니다.

다음은 코드입니다.

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

class Main{
    static int N,M;
    static boolean[] check;
    static boolean exist = false;
    static List<Integer>[] graph;

    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        check = new boolean[N];
        graph = new List[N];
        for(int i=0;i<N;i++) graph[i] = new ArrayList<>();
        for(int i=0;i<M;i++){
            st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            graph[a].add(b);
            graph[b].add(a);
        }

        for(int i=0;i<N;i++){
            check[i] = true;
            dfs(i,1);
            if(exist) break;
            check[i] = false;
        }
        System.out.println(exist ? 1 : 0);
    }

    static void dfs(int curr, int dpt){
        if(dpt == 5 || exist){
            exist = true;
            return;
        }

        for(int next : graph[curr]){
            if(!check[next]){
                check[next] = true;
                dfs(next,dpt+1);
                check[next] = false;
            }
        }
    }
}

profile
저는 상황에 맞는 최적의 솔루션을 깊고 정확한 개념의 이해를 통한 다양한 방식으로 해결해오면서 지난 3년 동안 신규 서비스를 20만 회원 서비스로 성장시킨 Software Developer 최민길입니다.

0개의 댓글

관련 채용 정보