프로그래머스

[프로그래머스][Kotlin] 네트워크

끝까지 처음처럼 2023. 2. 1. 16:25
728x90
import java.util.*
class Solution {
    
    private var nodeList = mutableListOf<MutableList<Int>>()
    private var visited = mutableListOf<Boolean>()
    private var answer = 0
    
    fun solution(n: Int, computers: Array<IntArray>): Int {
        nodeList.add(mutableListOf<Int>())
        visited.add(true)
        for(i in 0 .. n-1){
            var tempList = mutableListOf<Int>()
            for(j in 0 .. n-1){
                if(i == j) {
                    tempList.add(0)
                } else {
                    if(computers[i][j] != 0){
                        tempList.add(j+1)
                    } else {
                        tempList.add(0)
                    }
                }
            }
            nodeList.add(tempList)
            visited.add(true)
        }

        for(i in 1 .. n){
            if(visited[i]){
                dfs(i)
                answer++
            }
        }
        return answer
    }

    private fun dfs(i : Int){
        visited[i] = false
        for(j in 0 .. nodeList[i].size-1){
            if(nodeList[i][j] != 0 && visited[nodeList[i][j]]){
                dfs(nodeList[i][j])
            }
        }
    }
}

알고리즘을 공부하던중 DFS를 공부하며 작성한 문제입니다.

해당문제는 DFS를 알고 있다면 어렵지 않게 풀 수 있는 문제지만, 아직 DFS 및 BFS를 확실히 다루지 못하여 추가적으로 공부를 해야될 필요성을 느꼈습니다.

아래는 실행결과 입니다.

테스트 1 통과 (0.07ms, 59.4MB)
테스트 2 통과 (0.08ms, 59.7MB)
테스트 3 통과 (0.26ms, 59.9MB)
테스트 4 통과 (0.15ms, 61MB)
테스트 5 통과 (0.04ms, 62.2MB)
테스트 6 통과 (1.04ms, 60.7MB)
테스트 7 통과 (0.12ms, 60.6MB)
테스트 8 통과 (0.63ms, 60.6MB)
테스트 9 통과 (0.55ms, 61.3MB)
테스트 10 통과 (0.54ms, 59.7MB)
테스트 11 통과 (2.25ms, 62.8MB)
테스트 12 통과 (1.63ms, 61.5MB)
테스트 13 통과 (0.92ms, 61MB)