洞窟探検
アルゴリズムの資料は私も自分で解答したことがありますが、他の人との解答の比較を通じて、私が整理したこれらの資料はもっと良いアルゴリズムを学ぶためです.
プログラマー-洞窟探検
https://programmers.co.kr/learn/courses/30/lessons/67260
解答:アクセスするかどうかとアクセスする必要がある部屋の情報を配列に格納します.DFSアルゴリズムを使用して部屋をブラウズし、条件を決定します.
import java.util.*;
class Solution {
public boolean solution(int n, int[][] path, int[][] order) {
boolean[] visit = new boolean[n];
ArrayList<Integer>[] list = new ArrayList[n];
int [] before = new int[n];
int [] next = new int [n];
for (int i = 0; i < n; i++) {
list[i] = new ArrayList<Integer>();
}
for (int i = 0; i < path.length; i++) {
int [] arr = path[i];
list[arr[0]].add(arr[1]);
list[arr[1]].add(arr[0]);
}
for(int [] i : order) {
before[i[1]] = i[0];
}
if(before[0] != 0) return false; // 테스트 케이스 30번
visit[0] = true;
Stack <Integer> st = new Stack<Integer>();
for(int i : list[0]) {
st.add(i);
}
while(!st.isEmpty()) {
int num = st.pop();
if(visit[num]) continue;
if(!visit[before[num]]) {
next[before[num]] = num;
continue;
}
visit[num] = true;
for(int i : list[num]) {
if(!visit[i]) st.add(i);
}
if(next[num] != 0) st.add(next[num]);
}
for(int i = 0; i < n; i++){
if(!visit[i]) return false;
}
return true;
}
}
Reference
この問題について(洞窟探検), 我々は、より多くの情報をここで見つけました https://velog.io/@jkh2801/프로그래머스-동굴-탐험テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol