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
- 람다 캡쳐링
- 자연변수
- 자바로그
- SSR #CSR
- Routing Policies
- Connection Draining
- oracle
- querydsl-sql
- superset-oracle
- hikari cp
- UNION 열
- 아파치 드루이드
- queryDsl #JPA #hibernate
- reflection API
- afterCompletion
- ContentCachingRequestWrapper
- 스프링
- CannotGetJdbcConnectionException
- 슬로우 쿼리
- Duration-Based Cookie
- ReactAdmin
- Application-Based Cookie
- 네트워크 io
- Route53
- aws
- jpa
- 코딩삽질일기
- Cross-Zone Load Balancing
- ChatGPT
- RequestBody로깅
Archives
- Today
- Total
Forest Gump?
[LeetCode] Number of Islands - with DFS 본문
문제 조건
'1'(땅)과 '0'(물)의 지도를 나타내는 m x n 2D 이진 그리드 그리드가 주어지면 섬의 수를 반환합니다. 섬은 물로 둘러싸여 있으며 인접한 육지가 수평 또는 수직으로 연결되어 형성됩니다. 그리드의 네 모서리가 모두 물로 둘러싸여 있다고 가정할 수 있습니다.
입출력
INPUT :
char[][] grid = {
{'1', '1', '0', '1', '0'},
{'1', '1', '0', '0', '0'},
{'1', '1', '1', '1', '0'},
{'0', '0', '0', '0', '0'}};
OUTPUT : 2
문제 접근
DFS를 이용하여 네 방향 각각의 탐색을 끝맞치면 1이 증가하는 형태로 육지의 개수를 파악하는 방법으로 한다.
단 이미 진행한 행렬의 값의 경우 값을 마킹을 하여 중복 순회가 안되도록 한다.
문제 풀이
public static void main(String[] args) {
var grid = new char[][]{
{'1', '1', '0', '1', '0'},
{'1', '1', '0', '0', '0'},
{'1', '1', '1', '1', '0'},
{'0', '0', '0', '0', '0'}
};
noi(grid);
}
public static int noi(char[][] grid) {
int count = 0;
for (int i = 0; i < grid.length; i++){
for(int j = 0; j < grid[i].length; j++){
if(grid[i][j] == '1'){
dfs(i,j,grid);
count++;
}
}
}
return count;
}
public static void dfs(int i,int j,char[][] grid) {
//호출하는 함수가 물밖이거나 물이면 종료
if( i<0 || i>=grid.length || j<0 || j>=grid[0].length || grid[i][j] == '0'){
return;
}
//방문한 노드는 0으로 변경
grid[i][j] = '0';
dfs(i+1,j,grid);
dfs(i-1,j,grid);
dfs(i,j+1,grid);
dfs(i,j-1,grid);
}
어려웠던 점
DFS / BFS 류의 문제를 오랜만에 다시 풀어봤는데, 상황을 머리속에 그리지 않고 풀려고 하니까 많이 힘들었다.
유튜브를 참고하면서 물과 땅의 지도를 형상화 해서, 지뢰 찾기 처럼 한번 순회 시 땅을 변환하는 식으로 생각했더니
조금 형상화가 잘되서 도움이 되었다. BFS방법으로도 해당 문제를 풀어봐야겠다.
참고 자료
- 자바 알고리즘 인터뷰 with Kotlin
- [https://leetcode.com/problems/number-of-islands/description/] 리트코드 200
- [https://www.youtube.com/watch?v=ErKakElVZZo] 유튜브 강의 참고