Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions JSY8869/CHAPTER 5/실전 5-3/CodingTest5_3_N_DFS.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import java.util.*;
class CodingTest5_3_N_DFS{
public static void main(String[] args){
int N = 6;
int M = 5;
int result = 0;
int i_temp;
int j_temp;
int[][] space = {{0,1,0,0,1},{1,0,1,1,0},{0,1,1,1,0},{0,0,1,1,1},{0,1,0,0,1},{0,1,1,1,0}};
int[] dx = {-1,1,0,0};
int[] dy = {0,0,-1,1};
for(int i = 0; i < N; i++){
for(int j = 0; j < M; j++){
if (space[i][j] == 0){ // 현재 위치가 공간이 있다면 그 공간을 한칸씩 이동하면서 탐색
i_temp = i;
j_temp = j;
result += 1;
space[i][j] = 2;
while_1 : while(true){
for(int k = 0; k < 4; k++){ // 4방향을 탐색하면서 빈공간이 보일때마다 한칸씩 이동하면서 탐색함 (두더지를 생각하였음)
try{
if(space[i+dx[k]][j+dy[k]] == 0){
i = i+dx[k];
j = j+dy[k];
k = -1;
space[i][j] = 2;
for_1 : for(int t = 2; t < 4; t++){ // 4방향을 탐색하면서 빈공간이 보일때마다 한칸씩 이동하면서 탐색함 (두더지를 생각하였음)
try{
if(space[i+dx[t]][j+dy[t]] == 0){
space[i+dx[t]][j+dy[t]] = 2;
break for_1;
}
}catch(Exception e){
;
}
}
}
}catch(Exception e){
;
}
}
break while_1;
}
i = i_temp;
j = j_temp;
}
}
}
System.out.println(result);
}
}

7 changes: 6 additions & 1 deletion JSY8869/CHAPTER 5/실전 5-3/README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,9 @@ N X M 크기의 얼음 틀이 있다. 구멍이 뚫려 있는 부분은 0, 칸
## 풀이
- [`DFS`](https://www.notion.so/f150296a960e4fae8b8b22836d665343) 사용!
- VHDL을 학습하며 배웠던 병행문이 생각났고, 비슷한 느낌으로 한번에 퍼져가면서 탐색하는 알고리즘을 생각함
- 상하좌우로 재귀를 통해 퍼져 가면서 공간을 탐색함
- 상하좌우로 재귀를 통해 퍼져 가면서 공간을 탐색함

## DFS를 사용하지 않은 풀이
- 두더지가 땅을 파는 모습을 생각하면서 만든 코드
- 한칸씩 탐색 하다가 공간을 발견하는 순간 파고 들어 그 공간을 모두 탐색함
- 그 후 그 공간을 모두 채우고 다시 원래의 위치에서 탐색을 시작함