[Gold V] ABCDE - 13023
성능 요약
메모리: 21132 KB, 시간: 220 ms
분류
백트래킹, 깊이 우선 탐색, 그래프 이론, 그래프 탐색
제출 일자
2025년 2월 9일 18:49:30
문제 설명
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을 출력한다.
- 인접리스트를 통해 친구 정보를 저장한다.
- 백트래킹을 통해 연결된 모든 친구의 수를 탐색한다
- 임의의 친구 a,b,c,d,e가 모두 연결되어 있기 위해서 필요한 depth == 4
- 이미 찾았다면 dfs를 바로 return (가지치기)
import java.util.*;
import java.io.*;
class Main {
static int N,M;
static int answer = 0;
static List<Integer>[] adjList;
static boolean[] visited;
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());
adjList = new List[N];
visited = new boolean[N];
for(int i=0; i<N; i++){
adjList[i] = new ArrayList<>();
}
for(int i=0; i<M; i++){
st = new StringTokenizer(br.readLine());
int from = Integer.parseInt(st.nextToken());
int to = Integer.parseInt(st.nextToken());
adjList[from].add(to);
adjList[to].add(from);
}
for(int i=0; i<N; i++){
visited[i] = true;
dfs(i, 0);
visited[i] = false;
}
System.out.println(answer);
br.close();
}
static void dfs(int n, int depth){
if(depth == 4){
answer = 1;
return;
}
if(answer != 0){
return;
}
for(int friend : adjList[n]){
if(visited[friend])
continue;
visited[friend] = true;
dfs(friend, depth+1);
visited[friend] = false;
}
}
}
'코딩테스트 > 백준' 카테고리의 다른 글
[백준/Java] 1620 - [Silver IV] 나는야 포켓몬 마스터 이다솜 (0) | 2025.02.20 |
---|---|
[백준/Java] 11660 - [Silver I] 구간 합 구하기 5 (0) | 2025.02.14 |
[백준/Java] 14719 - [Gold V] 빗물 (0) | 2025.02.09 |
[백준/Java] 9012 - [Silver IV] 구간 합 구하기 5 (0) | 2025.02.07 |
[백준/Java] 2667 - [Silver I] 단지번호붙이기 (0) | 2025.01.19 |