문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
주어진 격자는 행과 열로 이루어져 있고, grid[i][j] = 1은 육지를, grid[i][j] = 0은 물을 나타낸다.
격자 셀은 가로/세로로 연결되어 있다(대각선 연결은 없음). 격자는 완전히 물로 둘러싸여 있고, 섬은 하나(하나 이상의 연결된 육지)이다.
섬에는 호수가 없다. 섬 내부의 물과 섬 주변의 물이 연결되어 있지 않다. 각 셀은 한 변의 길이가 1인 정사각형이다. 격자는 직사각형이며, 가로와 세로 길이는 100을 넘지 않는다. 섬의 둘레를 구해라.
#1
Input: grid = [[0, 1, 0, 0], [1, 1, 1, 0], [0, 1, 0, 0], [1, 1, 0, 0]]
Output: 16
Explanation: 위 이미지에서 노란색 줄무늬 16개가 경계선이다.
#2
Input: grid = [[1]]
Output: 4
#3
Input: grid = [[1, 0]]
Output: 4
class Solution {
public int islandPerimeter(int[][] grid) {
int rows = grid.length;
int cols = grid[0].length;
int perimeter = 0;
for(int r = 0; r < rows; r++){
for(int c = 0; c < cols; c++){
if(grid[r][c] == 1){
perimeter += dfs(grid, r, c);
}
}
}
return perimeter;
}
private int dfs(int[][] grid, int r, int c){
if(r < 0 || r >= grid.length || c < 0 || c >= grid[0].length || grid[r][c] == 0){
return 1;
}
if(grid[r][c] == -1){
return 0;
}
grid[r][c] = -1;
return (dfs(grid, r + 1, c) + dfs(grid, r - 1, c) + dfs(grid, r, c + 1) + dfs(grid, r, c - 1));
}
}