Daily LeetCode Challenge - 2101. Detonate the Maximum Bombs

Min Young Kim·2023년 6월 2일
0

algorithm

목록 보기
161/198

Problem From.

https://leetcode.com/problems/detonate-the-maximum-bombs/

오늘 문제는 좌표 평면위의 폭탄을 하나 선택해서 터뜨린다고 하였을때, 그로 인해서 터질 수 있는 폭탄의 수 중에 가장 큰 수를 구하는 문제였다.

먼저 graph 를 만든다고 가정하고, 폭탄 하나를 선택했을때, 그와 이어져있는 모든 폭탄을 찾아서 map 형식으로 묶어준다. 피타고라스 정리를 이용하여, 폭탄의 반경안에 다른 폭탄이 들어가있는지 계산하였다.

그런 다음 DFS 를 이용해서 각 폭탄을 터뜨릴때 터질 수 있는 폭탄의 최대 수를 구하였다.

class Solution {
    
    private var answer = 0
    private var chain = 0
    
    fun maximumDetonation(bombs: Array<IntArray>): Int {
        
        val bombMap = mutableMapOf<Int, MutableList<Int>>()
        
        for(i in 0 until bombs.size) {
            for(j in 0 until bombs.size) {
                if(i == j) continue
                val distance = Math.pow((bombs[i][0] - bombs[j][0]).toDouble() , 2.0) + Math.pow((bombs[i][1] - bombs[j][1]).toDouble() , 2.0)
                val area = Math.pow(bombs[i][2].toDouble(), 2.0)
                
                if(distance <= area) {
                    if(bombMap.containsKey(i)) {
                        val list = bombMap[i]!!
                        list.add(j)
                        bombMap[i] = list
                    }else {
                        bombMap[i] = mutableListOf(j)
                    }
                    
                }
                
            }
        }
        
        for(i in bombs.indices) {     
            val visit = BooleanArray(bombs.size) { false }   
            chain = 0
            bombDFS(bombMap, visit, i)
        }
        
        return answer
    }
    
    private fun bombDFS(bombMap: MutableMap<Int, MutableList<Int>>, visit: BooleanArray, index: Int) {
        
        if(visit[index]) return
        visit[index] = true
        
        chain += 1
        
        answer = Math.max(answer, chain)
        
        val nextList = bombMap[index] ?: listOf<Int>()
        
        for(num in nextList) {
            bombDFS(bombMap, visit, num)
        }
        
    }
    
}
profile
길을 찾는 개발자

0개의 댓글