sggnology
하늘속에서IT
sggnology
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • Algorithm (31)
      • Programmers (27)
      • Baekjoon (4)
    • WIKI (4)
      • VirtualBox (1)
      • Power Toys (1)
    • NodeJS (4)
      • nvm (1)
      • React (1)
      • Vue (1)
    • Dev Language (3)
      • Java (2)
      • Kotlin (1)
    • Spring Boot (17)
      • Gradle (1)
      • JPA (3)
    • DB (4)
      • MariaDB (3)
      • Redis (0)
    • Android (6)
      • Debug (3)
    • Nginx (3)
      • Debug (1)
    • Intellij (0)
    • Network (1)
    • Git (2)
      • GitHub (2)
    • Chrome Extension (0)
    • ETC (5)
      • Monitoring (2)
    • Linux (1)
      • WSL (1)
    • Visual Studio (1)
    • Side Project (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 오블완
  • 연습문제
  • kotlin
  • 안드로이드 스튜디오
  • DB
  • mariadb
  • nginx
  • 백준
  • spring boot
  • JPA
  • 고득점 Kit
  • 레벨2
  • 티스토리챌린지
  • docker
  • Android Studio
  • 레벨3
  • 고득점KIT
  • java
  • 알고리즘
  • 프로그래머스

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sggnology

하늘속에서IT

Algorithm/Programmers

Programmers :: DFS(깊이 우선 탐색법) 네트워크 레벨 3

2022. 3. 23. 10:29
728x90

풀이

import java.util.*

class Solution {
    fun solution(n: Int, computers: Array<IntArray>): Int {
        val graph = Graph(n, computers)
        graph.buildEdge(
            graph.computersToRelationList()
        )

        return graph.getNetworkSize()
    }
}

class Graph(n: Int, computers: Array<IntArray>) {

    val N: Int = n
    val adj = Array<LinkedList<Int>>(N) { LinkedList() }

    val computers = computers

    fun buildEdge(relationList: List<Map<Int, Int>>) {
        relationList.forEach { relation ->
            this.adj
                .get(relation.keys.first())
                .add(relation.values.first())
        }
    }

    fun computersToRelationList(): List<Map<Int, Int>> {
        return this.computers.mapIndexed { index, computer ->
            computer
                .mapIndexed { flatIndex, flatComputer ->
                    if (flatComputer != 0) {
                        if (index != flatIndex) {
                            mapOf(pair = Pair(index, flatIndex))
                        } else {
                            null
                        }
                    } else {
                        null
                    }
                }
                .filterNotNull()
        }.flatten()
    }

    fun DFS(v: Int): List<Boolean> {
        val visited = Array<Boolean>(N) { false }

        DFSUtil(v, visited)

        return visited.toList()
    } 

    fun DFSUtil(v: Int, visited: Array<Boolean>) {
        visited.set(v, true)

        val iter = this.adj.get(v).iterator()

        while (iter.hasNext()) {
            val next = iter.next()

            if (visited.get(next) == false) {
                DFSUtil(next, visited)
            }
        }
    }

    fun getNetworkSize(): Int{

        val networkList = mutableListOf<List<Boolean>>()

        for(i in 0 until N){
            networkList.add(this.DFS(i))
        }

        return networkList.distinct().size

    }
}

출처

 

코딩테스트 연습 - 네트워크

네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있

programmers.co.kr

 


참고
 

[알고리즘] 깊이 우선 탐색(DFS)이란 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

728x90

'Algorithm > Programmers' 카테고리의 다른 글

Programmers 스택/큐::레벨2::프린터  (0) 2022.04.08
Programmers :: 해시 전화 번호 목록 레벨2  (0) 2022.03.26
Programmers :: 정렬 가장 큰 수 레벨2  (0) 2022.03.23
Programmers :: Heap(힙) 더 맵게 레벨2  (0) 2022.03.23
Programmers :: Greedy(탐욕법) 체육복 레벨1  (0) 2022.03.15
    'Algorithm/Programmers' 카테고리의 다른 글
    • Programmers :: 해시 전화 번호 목록 레벨2
    • Programmers :: 정렬 가장 큰 수 레벨2
    • Programmers :: Heap(힙) 더 맵게 레벨2
    • Programmers :: Greedy(탐욕법) 체육복 레벨1
    sggnology
    sggnology
    하늘은 파란색이니까 내 삶도 파란색이길 ㅎㅎ

    티스토리툴바