This is definitely an easy one because all you have to do is to that if a block is filled up, check the four conditions:
- If the block is at the top row or if the block whose top is not filled up, then increase sides variable
- If the block is at the bottom row or if the block whose bottom is not filled up then increase sides variable
- If the block is the left most column or if the block whose left side is not filled up then increase sides variable
- Finally, if the block is the right most column of if the block whose right side is not filled up then increase sides variable.
class Solution {
fun islandPerimeter(grid: Array<IntArray>): Int {
var sides = 0
for(index in 0 until grid.size){
for(subIndex in 0 until grid.first().size){
if(grid[index][subIndex] == 1){
if(index == 0 || grid[index-1][subIndex] == 0) sides++ // top
if(index == grid.size - 1 || grid[index+1][subIndex] == 0) sides++ // bottom
if(subIndex == 0 || grid[index][subIndex-1] == 0) sides++ // left
if(subIndex == grid.first().size - 1 || grid[index][subIndex+1] == 0) sides++ // right
}
}
}
return sides
}
}
Runtime: 388 ms, faster than 54.55% of Kotlin online submissions for Island Perimeter.
Memory Usage: 58.3 MB, less than 100.00% of Kotlin online submissions for Island Perimeter.