Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 리트코드
- 파이썬
- 프로그래머스 java
- 백준
- 자바 5464
- 스프링 에러
- 리트코드 1557
- 인텔리제이 에러
- leetcode 1721
- BFS
- 구현
- 스택
- 백준 18222
- 코테
- 리트코드 자바
- java 프로그래머스
- 프로그래머스
- dfs
- daily challenge
- 분할정복
- leetcode
- 코딩테스트
- 자바
- Java
- java leetcode
- DP
- 그래프 자바
- 자바 리트코드
- 백준 16935
- 카카오
Archives
- Today
- Total
레벨업 일지
[Java] 백준 ABCDE 본문
문제
https://www.acmicpc.net/problem/13023
알아야 할 개념
- dfs 백트래킹
코드
dfs 탐색시 주의점을 알려준 문제
예제에 사이클 그래프가 보여서 난이도가 높은줄 알고 당황했었다. 해당 문제는 모든 정점에서 dfs 를 돌리는것으로 간단히 풀이 가능하다.
풀이는 다음과 같다.
- 주어진 그래프를 무방향 인접 그래프로 구현한다.
- 모든 정점에대해 DFS 탐색을 한다.
- DFS 탐색 깊이가 4 ( 시작 = 0 ) 이상이면 탐색을 종료하고 1 리턴한다.
- 그렇지 않으면 0 리턴한다.
백트래킹을 연습하는 문제라고 생각한다.
플래그를 세워서 dfs 탐색 종료 안하면 항상 모든 것을 탐색함으로 주의할것
풀이
자바
package solve;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
List<List<Integer>> g;
boolean flag ;
public static void main(String args[]) throws IOException {
Main m = new Main();
System.out.println(m.solve());
}
public int solve()throws IOException{
//입력을 받는다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
g = new ArrayList<>();
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());//친구 개수
for(int i=0 ;i < n; i++){
g.add(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());
g.get(a).add(b);
g.get(b).add(a);
}
boolean[] v = new boolean[n];
for(int i =0 ;i < n ;i++){
v[i] = true;
flag = false;
if(dfs(v, 0, n, i) == 1) return 1;
v[i] = false;
}
return 0;
}
public int dfs(boolean[] v, int level, int n, int cur){
if(flag || level >= 4){
flag = true;
return 1;
}
for(int nv : g.get(cur)){
if(!v[nv]){
v[nv] = true;
dfs(v, level+1, n, nv);
v[nv] = false;
}
}
return flag ? 1 : 0;
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[Java] 백준 9019.DSLR (0) | 2023.03.16 |
---|---|
[Java] 백준 크리보드 (0) | 2023.02.20 |
[Java] 백준 15686 치킨 배달 (0) | 2023.02.14 |
[Java] 백준 2839. 설탕 배달 (0) | 2023.02.03 |
[Java] 백준 18405 경쟁적 전염 (0) | 2023.01.20 |
Comments