CodingTest/LeetCode

[LeetCode] 1466. Reorder Routes to Make All Paths Lead to the City Zero, Medium

뜸부깅 2025. 4. 29. 13:18
반응형

1. 문제

  • 도시의 수 n이 주어지고, 도시 간의 연결 도로 정보 2차원 배열이 주어질 때 모든 도시에서 0번 도시로 갈 수 있도록 변경해야하는 도로의 수를 반환하라.

2. 해결

function minReorder(n: number, connections: number[][]): number {
    const visited = new Array(n).fill(false);
    const map = new Map<number, number[][]>();

    let count = 0;

    for (const [from, to] of connections) {
        map.set(from, (map.get(from) || []).concat([[to, 1]])); 
        map.set(to, (map.get(to) || []).concat([[from, 0]]));  
    }

    function DFS(node: number) {
        visited[node] = true;

        for(const [nextNode, isOriginal] of map.get(node) || []) {
            if(!visited[nextNode]) {
                if(isOriginal === 1) count++;
                DFS(nextNode);
            }
        }
    }

    DFS(0)

    return count;  
};
  • 일단 못풀었는데, 방문 배열과 map을 통해 노드 연결 정보를 구성하는 데 까지는 접근했다.
  • 이 때 방향 정보를 어떻게 알 수 있을까 고민하다가 다른 풀이를 참고했다.
  • 방향 정보를 1과 0으로 두고, 노드와 함께 묶어 map에 2차원 배열 형태로 저장한다.
  • 이 때, 1은 해당 노드에서 나가는 방향의 정보고 0은 해당 노드로 들어오는 방향의 정보다.
  • 이 상태에서 0번 노드부터 탐색을 시작하면 우리가 고려해야 할 것은 나가는 방향의 정보만을 고려하면 된다.