알고리즘 문제 풀기

백준 15681: 트리와 쿼리 - javascript(트리, dfs)

Fo_rdang 2024. 9. 24. 15:44
반응형

문제 출처

https://www.acmicpc.net/problem/15681

 

정답 풀이 

뭘 구하라는건지 이해가 안갔는데, 

서브트리 개수를 구하는 문제이다. 

 

 

뜬금없이 쿼리? 이랬는데, 해당 문제에서 쿼리는 5,4,8 의 서브트리를 구하라는 3개의 쿼리가 있다. 

 

서브트리는 뭘까?

=> 해당 노드를 루트로 하고, 그 아래 속하는 모든 자식 노드들을 포함하는 트리이다. ! 

 

 

 

정답 코드 

const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); 
const [n,r,q] = input[0].split(' ').map(v => +v)
const graph = Array.from({length: n+1}, () => []); 
for(let i=1; i<n; i++){
    const [u,v] = input[i].split(' ').map(v => +v); 
    graph[u].push(v); 
    graph[v].push(u)
}

const queries = []; 
for(let i=n; i<n+q; i++){
    queries.push(Number(input[i]))
}

const subtree = Array(n+1).fill(0)
const visited = Array(n+1).fill(false)

function dfs(node){
    visited[node] = true;
    subtree[node] = 1; 
    
    for(const next of graph[node]){
        if(!visited[next]){
            subtree[node] += dfs(next)
        }
    }
    return subtree[node]
}

dfs(r);

const results = queries.map(query => subtree[query])
console.log(results.join('\n'))
반응형