Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- programmers
- Inner Class
- FCM
- compose
- JetpackCompose
- memory leak
- 프로그래머스
- Android
- hidden-api
- 삽질로그
- ARRANGEMENT
- 알고리즘
- java
- Alignment
- BFS
- broadcastAsUser
- 구현
- NextPermutaion
Archives
- Today
- Total
undefined
[Programmers] 무인도 여행 본문
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