Notice
Recent Posts
Recent Comments
Link
«   2026/08   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Archives
Today
Total
관리 메뉴

undefined

[Programmers] 무인도 여행 본문

알고리즘

[Programmers] 무인도 여행

un-defined 2023. 9. 11. 03:07

 

class Solution {
	lateinit var map :Array<IntArray>
    val direction = arrayOf(Point(1,0), Point(-1,0), Point(0,1), Point(0,-1))
    var answer = mutableListOf<Int>()
    
    fun solution(maps: Array<String>): IntArray {

        map = Array(maps.size){IntArray(maps[0].length){-1} }

        for(r in 0 until maps.size){
            for(c in 0 until maps[r].length){
                val ch = maps[r][c]
                if(ch.isDigit()) map[r][c] = Character.getNumericValue(ch)
            }
        }

        for (r in map){
            println(r.toString())
        }

        for(y in 0 until map.size){
            for(x in 0 until map[y].size){
               if(map[y][x]<=0) continue
                dfs(y,x)
            }
        }
        answer.sort()
        return if(answer.isEmpty()) intArrayOf(-1) else answer.toIntArray()
    }

    fun dfs(sy:Int,sx:Int){
        var sum = map[sy][sx]
        val q :ArrayDeque<Point> = ArrayDeque()
        q.add(Point(sy,sx))
        map[sy][sx]=0
        var ny = 0
        var nx = 0
        var start:Point
        while (q.isNotEmpty()){
            start = q.removeFirst()

            for (d in direction){
                ny = d.y + start.y
                nx = d.x + start.x

                if(isOutOfBound(ny,nx) || map[ny][nx]<=0) continue
                q.add(Point(ny,nx))
                sum +=  map[ny][nx]
                map[ny][nx] = 0
            }
        }

        answer.add(sum)
    }

    fun isOutOfBound(y:Int,x:Int):Boolean{
        return if(x<0 || y<0 || x>=map[0].size || y>= map.size) true else false
    }

    data class Point(val y:Int,val x:Int)
}

 

반응형

'알고리즘' 카테고리의 다른 글

[Programmers] 연속 부분 수열 합의 개수  (0) 2023.09.12
[알고리즘] NextPermutation  (0) 2023.09.10
Comments