알고리즘/프로그래머스
등대 !
베리영young
2024. 9. 25. 18:25
사용 알고리즘: dfs
사용 언어: java
우왕... 이걸 이제 풀었따
import java.util.*;
class Solution {
boolean[] lit;
List<Integer>[] list;
public int solution(int n, int[][] lighthouse) {
init(n, lighthouse);
dfs(1, 1);
int answer = 0;
for(int i=1; i<n+1; i++) {
if(lit[i])
answer++;
}
return answer;
}
public int dfs(int node, int prev) {
if(list[node].size()==1 && prev == list[node].get(0)) {
return 1;
}
int sum = 0;
for(int nxt: list[node]) {
if(prev == nxt) continue;
sum += dfs(nxt, node);
}
if(sum > 0) {
lit[node] = true;
return 0;
}
return 1;
}
public void init(int n, int[][] lighthouse) {
lit = new boolean[n+1];
list = new ArrayList[n+1];
for(int i=0; i<n+1; i++) {
list[i] = new ArrayList<>();
}
for(int i=0; i<n-1; i++) {
list[lighthouse[i][0]].add(lighthouse[i][1]);
list[lighthouse[i][1]].add(lighthouse[i][0]);
}
}
}
여기서 변형이 좀만 되도 풀 수 있을지 의문이긴 한데...
일단 등대는 풀 수 있게 되었따..
몇 트 만이지