# Number Of Island by DFS

Given an `m x n` 2d `grid` map of `'1'`s (land) and `'0'`s (water), return *the number of islands*.

An **island** is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.

이번 강의부터는 DFS와 BFS를 주로 다루는 그래프 문제 접근방법과 풀이 방법, 알고리즘 등에 대해 자세히 학습해볼 것이다. 어렵게만 생각했었지만, 생각보다 단순하게 재귀 호출로 사방에 있는 원소에 방문하여 해결했다.

```java
class Solution {
    int m;
    int n;
    public int numIslands(char[][] grid) {
        m = grid.length;
        n = grid[0].length;
        int count = 0;
        
        for(int i=0;i<m;i++) {
            for(int j=0;j<grid[i].length;j++) {
                if(grid[i][j] == '1') {
                    count++;
                    dfs(grid,i,j);
                }
            }
        }
        return count;
    }
    public void dfs(char[][] grid, int i, int j) {
        if(i<0||i>=m||j<0||j>=n||grid[i][j] != '1') return 0;
        grid[i][j] = 'X';
        
        dfs(grid,i-1,j);
        dfs(grid,i+1,j);
        dfs(grid,i,j-1);
        dfs(grid,i,j+1);
    }
}
```
