๐ ๋ฌธ์ ๋งํฌ
๐ ํ์ด ๊ณผ์
- BFS ์ ํ์ ๋ฌธ์ ์
๋๋ค.
- ํน๋ณํ ์กฐ๊ฑด ์๊ฐ์์ด ํ๋์ฉ ๋ฒฝ์ ๋ค ๋ถ์ด๋ณด๋ฉด์ ํด๋ณด๋ ค๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ์ต๋๋ค.(๋๋ฌด ๋ฌธ์ ๋ฅผ ์์ผํ๊ฒ ์๊ฐํ ๊ฒ ๊ฐ์ต๋๋ค.)
- ์ฆ, BFS๋ด์์ ๋ฒฝ์ ๋ถ์๋ ๊ฒ์ ๋ํ ์กฐ๊ฑด์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
- ๊ทธ๋ฌ๋ฏ๋ก, ๋ด๋ถ ํด๋์ค Point์ ๊ฑฐ๋ฆฌ์ ๊ณต์ฌํ์์ ๋ํด ๋ณ์๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- ๊ธฐ์กด์ ์ ๋ visited 2์ฐจ์ ๋ฐฐ์ด์ boolean ํ์
์ผ๋ก ์ ์ธํ์ฌ ๋ฐฉ๋ฌธ์ ์ฒดํฌํ์ง๋ง ์ด๋ฒ์๋ ๊ณต์ฌํ์์ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ๋์์ ์ฒดํฌํ์ต๋๋ค.
- visited ๋ฐฐ์ด์ ๊ฐ์ ๋ชจ๋ Integer.MAX_VALUE๋ก ์ด๊ธฐํํฉ๋๋ค.
- ์ดํ, ๊ณต์ฌ ์ฌ๋ถ์ ์๊ด์์ด visited๋ฐฐ์ด์ ๊ฐ์ด ๊ณต์ฌํ์๋ณด๋ค ํด ๊ฒฝ์ฐ ๊ทธ๊ณณ์ ๋ฐฉ๋ฌธํ์ง ์์ ๊ณณ์
๋๋ค.
- ํ์ง๋ง, ๋ฐฉ๋ฌธํ ๊ณณ์ ๊ณต์ฌ ํ์ ๋ณ์๋ฅผ ํ ๋นํ์ฌ ๋น๊ต๋ฅผ ํฉ๋๋ค.
- ๊ณต์ฌํ์๋ ํ๋ฒ๋ง ๊ฐ๋ฅํ๊ธฐ์ ๊ณต์ฌํ์๊ฐ 0์ผ๋๋ง queue์ ์ถ๊ฐ์ ์ผ๋ก Point ํด๋์ค ๋ณ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- ์ดํ n,m์์น์ ๋ค๋ค๋ฅธ๋ค๋ฉด ๋ณ์๋ฅผ ๋ฐํํฉ๋๋ค.
๐ป ์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static int n,m,result;
static int[][] arr,visited;
static int[] dx = {-1,0,1,0};
static int[] dy = {0,-1,0,1};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
arr = new int[n + 1][m + 1];
visited = new int[n + 1][m + 1];
for(int i = 1; i< n + 1; i++){
String str = br.readLine();
for(int j = 1; j< m + 1; j++){
int value = Integer.parseInt(String.valueOf(str.charAt(j-1)));
arr[i][j] = value;
visited[i][j] = Integer.MAX_VALUE;
}
}
result = getRoute(1,1);
System.out.println(result);
}
private static int getRoute(int x, int y){
Queue<Point> queue = new LinkedList<>();
queue.offer(new Point(x, y,1,0));
visited[x][y] = 0;
while(!queue.isEmpty()){
Point point = queue.poll();
if(point.x == n && point.y == m){
return point.count;
}
for(int i = 0; i< 4; i++) {
int nowX = point.x + dx[i];
int nowY = point.y + dy[i];
if(nowX > 0 && nowY > 0 && nowX < n + 1 && nowY < m + 1){
if(visited[nowX][nowY] > point.drill){
if(arr[nowX][nowY] == 0){
queue.offer(new Point(nowX,nowY,point.count + 1,point.drill));
visited[nowX][nowY] = point.drill;
}else{
if(point.drill == 0){
queue.offer(new Point(nowX,nowY,point.count + 1,point.drill + 1));
visited[nowX][nowY] = point.drill + 1;
}
}
}
}
}
}
return -1;
}
static class Point{
int x, y,count, drill;
public Point(int x, int y, int count, int drill) {
this.x = x;
this.y = y;
this.count = count;
this.drill = drill;
}
}
}
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 11725๋ฒ : ํธ๋ฆฌ์ ๋ถ๋ชจ ์ฐพ๊ธฐ (Java) (0) | 2022.02.12 |
---|---|
๋ฐฑ์ค 1753๋ฒ : ์ต๋จ๊ฒฝ๋ก (Java) (0) | 2022.02.12 |
๋ฐฑ์ค 11660๋ฒ : ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 5(Java) (0) | 2022.01.17 |
๋ฐฑ์ค 1149๋ฒ : RGB๊ฑฐ๋ฆฌ (Java) (0) | 2022.01.17 |
๋ฐฑ์ค 15657๋ฒ : N๊ณผ M (8) (Java) (0) | 2022.01.17 |