알고리즘
프로그래머스 - 무인도 여행
최데브
2024. 8. 13. 22:12
이번에도 bfs 로 풀었다.
이런 유형의 문제는 조금씩 체크해야하는 조건만 다를뿐 풀이는 비슷비슷한거 같다.
import java.util.*
class Solution {
var dx = listOf(-1,1,0,0)
var dy = listOf(0,0,-1,1)
var r = 0
var c = 0
var answer = mutableListOf<Int>()
var visited = Array(0) { Array(0) { false } }
data class Moving(
var x : Int,
var y : Int
)
fun solution(maps: Array<String>): IntArray {
var map = mutableListOf<MutableList<Char>>()
r = maps.size
c = maps[0].length
visited = Array(r) { Array(c) { false } }
maps.forEach{ st->
var list = mutableListOf<Char>()
st.forEach{ it->
list.add(it)
}
map.add(list)
}
for(i in 0 .. r-1){
for(j in 0 .. c-1){
if(map[i][j] != 'X' && !visited[i][j]){
bfs(i,j,map)
}
}
}
if(answer.isEmpty()) return intArrayOf(-1)
return answer.sorted().toIntArray()
}
fun bfs(x : Int, y : Int , map : MutableList<MutableList<Char>>){
var q : Queue<Moving> = LinkedList()
var cnt = map[x][y].toString().toInt()
visited[x][y] = true
q.add(Moving(
x,y
))
while(q.isNotEmpty()){
var mv = q.poll()
for(i in 0 .. 3){
val nx = mv.x + dx[i]
val ny = mv.y + dy[i]
if(nx >= 0 && nx < r && ny >=0 && ny < c && map[nx][ny] != 'X' &&
!visited[nx][ny]){
q.add(Moving(nx,ny))
visited[nx][ny] = true
cnt += map[nx][ny].toString().toInt()
}
}
}
answer.add(cnt)
}
}