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 |
Tags
- 2643 색종이 올려 놓기
- 1188 음식 평론가
- 2661 java
- 18233 러버덕
- windows 원격 연결 설정
- django The requested operation has failed!
- django 프로젝트 시작
- 공유기 원격 설정
- 2961 도영이가 만든 맛있는 음식
- APPEND_SLASH = FALSE
- apache pythonpath
- django httpd error
- 18233 java
- The requested operation has failed!
- 14711 타일 뒤집기
- Problems occurred while performing provisioning operation
- django
- django settings.py
- 2643 java
- 18233 비트마스킹
- 원격 연결 포트 포워딩
- windows apache wsgi 에러
- 1188 java
- 14711 java
- 2661 좋은 수열
- java di
- django 웹 페이지
- django apache deploy error
- django windows 배포 에러
- 2961 java
Archives
라이브러리는 도서관 아닌가요
백준 (BOJ) 13023 ABCDE java dfs 본문
https://www.acmicpc.net/problem/13023
비방문처리 시점을 찾는 게 중요했던 dfs 문제
시간 초과가 나지 않게끔 연결돼 있는 노드들만 따로 hashset에 저장해서 반복문을 돌렸다.
아 참고로, 연속된 노드 5개가 연결된 경로 4개가 존재하면 되는 문제이다.
1 - 2 - 3 - 4 - 5 답
1 - 2 - 3 - 4 - 1 답
1 - 2 - 3 - 4 오답
(문제가 논란의 소지가 다분히 있는 거 같은데... ABCDE인데 ABCDA가 가능하면 안 되는 거 아닌가?)
비방문 처리 시점은 아래의 경우를 생각해보면 된다.
1 - 3 - 4 (4와 연결된 노드가 더 없어서 실패가 판명났다.)
근데 1 - 5 - 3 - 7 - 9 라는 성공할 수 있는 경우가 있다.
위에서 3을 방문해버렸기 때문에 방문할 수 없게 되면 많이 난감해진다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.StringTokenizer;
public class Main {
static boolean[] visited;
static HashSet<Integer> linkCheck;
static ArrayList<Integer>[] map;
static boolean flag;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
map = new ArrayList[N];
for(int i=0; i<N; ++i) map[i] = new ArrayList<>();
linkCheck = new HashSet<>();
for(int i=0; i<M; ++i){
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
map[x].add(y);
map[y].add(x);
linkCheck.add(x);
linkCheck.add(y);
}
flag = false;
for(Integer v : linkCheck){
visited = new boolean[N];
visited[v] = true;
if(dfs(0, v)){
flag = true;
break;
}
}
if(flag) System.out.print(1);
else System.out.print(0);
}
static boolean dfs(int depth, int v){
if(4 <= depth){
return true;
}
// v에 연결된 노드들 탐색
for(Integer a : map[v]){
if(!visited[a]){
visited[a] = true;
if(dfs(depth+1, a)) return true;
visited[a] = false; // 재방문할 수 있게 3을 unvisited 처리 ex) 1 - 3 - 4 (실패) --> 1 - 3 - 5 - 6 - 7 (성공)
}
}
return false;
}
}
'알고리즘 문제' 카테고리의 다른 글
백준 (BOJ) 21317 징검다리 건너기 java dp (2) | 2022.06.08 |
---|---|
백준 (BOJ) 2705 팰린드롬 파티션 java dp (0) | 2022.05.10 |
백준 (BOJ) 20495 수열과 헌팅 java (0) | 2022.04.21 |
백준 (BOJ) 16564 히오스 프로게이머 java (0) | 2022.04.18 |
백준 (BOJ) 1166 선물 java (0) | 2022.04.08 |
Comments