class Solution:
    def shortestAlternatingPaths(self, n: int, redEdges: List[List[int]], blueEdges: List[List[int]]) -> List[int]:
        rg = [[] for _ in range(n)]
        bg = [[] for _ in range(n)]
        d = [[-1, -1] for _ in range(n)]
        for s, e in redEdges: rg[s].append(e)
        for s, e in blueEdges : bg[s].append(e)
        queue = deque([(0, 'r'), (0, 'b')])
        d[0] = [0, 0]
        while queue:
            cur, prev = queue.popleft()
            if prev == 'r':
                nxt = d[cur][0]
                for next in bg[cur]:
                    if d[next][1] == -1:
                        d[next][1] = nxt + 1
                        queue.append((next, 'b'))
            if prev == 'b':
                nxt = d[cur][1]
                for next in rg[cur]:
                    if d[next][0] == -1:
                        d[next][0] = nxt + 1
                        queue.append((next, 'r'))
        ans = [-1 for _ in range(n)]
        for i in range(n):
            if -1 in d[i]:
                ans[i] = sum(d[i]) + 1
            else :
                ans[i] = min(d[i])
        return ans


평범한 BFS 문제인데 생각보다 귀찮았당; 이틀 연속 BFS네