문제
https://www.acmicpc.net/problem/25195
학습키워드
- DFS
풀이 및 코드
DFS를 통해 깊게 들어가면서 곰곰이를 만나는지 확인하는 방식이다.
- 정답의 초기값을 "Yes"로 설정한 다음, 탐색 도중 곰곰이를 만난 경우 return을 한다.
- 만약 더 이상 갈 곳이 없는데 곰곰이를 만나지 않았다면 (meet == false)라면 정답을 "yes"로 변경해준다
import java.util.*;
import java.io.*;
public class Main {
private static String answer = "Yes";
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<Integer, List<Integer>> graph = new HashMap<>();
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int u = Integer.parseInt(st.nextToken());
int v = Integer.parseInt(st.nextToken());
graph.computeIfAbsent(u, k -> new ArrayList<>()).add(v);
}
int S = Integer.parseInt(br.readLine());
boolean[] gomgoms = new boolean[N + 1];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < S; i++) {
gomgoms[Integer.parseInt(st.nextToken())] = true;
}
dfs(graph, 1, gomgoms, false);
System.out.println(answer);
}
private static void dfs(Map<Integer, List<Integer>> graph, int current, boolean[] gomgoms, boolean meet) {
if (gomgoms[current]) {
return;
}
if (!graph.containsKey(current)) {
if (meet == false) {
answer = "yes";
}
return;
}
for (int n : graph.get(current)) {
dfs(graph, n, gomgoms, meet);
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
99클럽 코테 스터디 14일차 TIL (14916번: 거스름돈) (0) | 2024.11.11 |
---|---|
99클럽 코테 스터디 12일차 TIL (7569번: 토마토) (0) | 2024.11.08 |
99클럽 코테 스터디 10일차 TIL (18352번: 특정 거리의 도시 찾기) (3) | 2024.11.06 |
99클럽 코테 스터디 8일차 TIL (2644번: 촌수계산) (4) | 2024.11.04 |
99클럽 코테 스터디 6일차 TIL (2805번: 나무 자르기) (0) | 2024.11.02 |
댓글