반응형
문제
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을 출력한다.
import java.util.*;
import java.io.*;
public class Main{
static boolean visited[];
static ArrayList<Integer>[] arr;
static boolean arrive;
public static void main(String[] args){
int nodeNum;
int edgeNum;
arrive = false;
Scanner scanner = new Scanner(System.in);
nodeNum = scanner.nextInt();
edgeNum = scanner.nextInt();
arr = new ArrayList[nodeNum];
visited = new boolean[nodeNum];
for(int i=0; i<nodeNum; i++){
arr[i] = new ArrayList<Integer>();
}
for(int i=0; i<edgeNum; i++){
int start = scanner.nextInt();
int end = scanner.nextInt();
arr[start].add(end);
arr[end].add(start);
}
for(int i=0; i<nodeNum; i++){
DFS(i, 1);
if(arrive)
break;
}
if(arrive)
System.out.println("1");
else
System.out.println("0");
}
public static void DFS(int now, int depth){
if(depth == 5 || arrive){
arrive = true;
return;
}
visited[now] = true;
for(int i : arr[now]){
if(!visited[i]){
DFS(i, depth + 1);
}
}
visited[now] = false;
}
}
반응형
'Algorithm > BAEKJOON' 카테고리의 다른 글
[Java] 1260 DFS와 BFS (0) | 2023.05.16 |
---|---|
[Java] 2023 신기한 소수 (0) | 2023.04.30 |
[Java] 11724 연결 요소의 개수 (2) | 2023.04.29 |
[Java] 10989 수 정렬하기 3 (0) | 2023.04.28 |
[Java] 2751 수 정렬하기 2 (0) | 2023.04.27 |