[백준]#13023 ABCDE

pss407·2020년 10월 1일
0

⌨알고리즘(백준)

목록 보기
206/212

문제

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을 출력한다.

예제 입력 1

5 4
0 1
1 2
2 3
3 4

예제 출력 1

1

예제 입력 2

5 5
0 1
1 2
2 3
3 0
1 4

예제 출력 2

1

예제 입력 3

6 5
0 1
0 2
0 3
0 4
0 5

예제 출력 3

0

예제 입력 4

8 8
1 7
3 7
4 7
3 4
4 6
3 5
0 4
2 7

예제 출력 4

1

풀이

이 문제는 DFS 알고리즘을 이용해서 풀 수 있었다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main {
    static int N;
    static int M;
    static int ans = 0;
    static ArrayList<Integer>[] map;

    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");
        N = Integer.parseInt(input[0]);
        M = Integer.parseInt(input[1]);
        map = new ArrayList[N];
        for(int i=0; i<N; i++)
            map[i] = new ArrayList<>();

        for(int i=0; i<M; i++) {
            input = br.readLine().split(" ");
            int a = Integer.parseInt(input[0]);
            int b = Integer.parseInt(input[1]);

            map[a].add(b);
            map[b].add(a);
        }

        for(int i=0; i<N; i++) {
            if(ans==1) break;
            dfs(new boolean[N], i, 0);
        }

        System.out.println(ans);
    }

    public static void dfs(boolean[] visited, int num, int cnt) {
        if(ans==1) return;

        if(cnt>=5) {
            ans=1;
            return;
        }

        for(int i=0; i<map[num].size(); i++) {
            int x = map[num].get(i);

            if(!visited[x]) {
               visited[x] = true;
               dfs(visited, x, cnt+1);
               visited[x] = false;
            }
        }
    }
}
profile
👶🏻Jr. Programmer

0개의 댓글