[프로그래머스 LV3] 순위

Junyoung Park·2022년 8월 12일
0

코딩테스트

목록 보기
548/631
post-thumbnail

1. 문제 설명

순위

2. 문제 분석

연결 그래프를 만든 뒤, 부모-자식, 자식-노드으로 연결되는 노드의 개수가 주어진 노드의 개수와 동일하다면 (자신을 제외하고) 다른 모든 그래프와 비교, 순위를 얻어낼 수 있다는 뜻이다.

3. 나의 풀이

import Foundation

func solution(_ n:Int, _ results:[[Int]]) -> Int {
    var nodes = Array(repeating: [Int](), count: n+1)
    var nodesReverse = Array(repeating: [Int](), count: n+1)
    for result in results {
        let (parent, child) = (result[0], result[1])
        nodes[parent].append(child)
        nodesReverse[child].append(parent)
    }
    
    var nodesCnt = Array(repeating: 0, count: n+1)
    
    for idx in 1..<n+1 {
        var queue = [Int]()
        var visited = Array(repeating: false, count: n+1)
        queue.append(idx)
        visited[idx] = true
        var index = 0
        var total = 0
        
        while queue.count > index {
            let curNode = queue[index]
            
            for nextNode in nodes[curNode] {
                if !visited[nextNode] {
                    visited[nextNode] = true
                    queue.append(nextNode)
                    total += 1
                }
            }
            index += 1
        }
        
        queue = [idx]
        visited = Array(repeating: false, count: n+1)
        visited[idx] = true
        index = 0
        
        while queue.count > index {
            let curNode = queue[index]
            
            for nextNode in nodesReverse[curNode] {
                if !visited[nextNode] {
                    visited[nextNode] = true
                    queue.append(nextNode)
                    total += 1
                }
            }
            index += 1
        }
        
        nodesCnt[idx] = total + 1
    }
    
    let answer = nodesCnt.filter{$0 == n}.count
    return answer
}
profile
JUST DO IT

0개의 댓글