γ γ γ γ λ©λͺ¨λ¦¬λ λ무 λ§μ΄ μ¬μ©νκ³ μλλ λλ €μ μ΄λ κ² μ λ κ² λλ¦ λ°κΏλ΄€μ§λ§ λ³νμ§λ₯Ό μμλ€. μλλ κ·Έλ λ€ μ³λ λ©λͺ¨λ¦¬κ° λ무 μμνλ€. classνλ μμ±ν΄μ νμ μ§μ΄λ£μ΄μ€μΌ νλ..?λ μκ°μ΄ λ€μμ§λ§, μμ μ νμλ μμ€λ intλ°°μ΄λ‘ νμλλ° λκ° λ¬Έμ μ§ κ³ λ―Όνλ€.
κ·Όλ° λ°©κΈ μ΄μ λ₯Ό νλ μ°Ύμλλλ° λ무 μ΄μ΄κ° μλ€. BFSν λ κΌ λ€μ΄κ°λ dir[]
λ°°μ΄μ que
μμμ λ§€λ² μ μΈ/μμ±νμ§ μκ³ que
λ§ λ°μλ€κ° μ μΈν΄μ μΌλλ 1/3μ΄ μ€μλ€ γ
γ
,,μ΄μ΄μλ€
μ½λλ κ·Έλ₯ 맨 μ²μ μλν΄μ μ±κ³΅ν μ½λλΌ μ΅μ ν μ ν μ λμ΄ μλ€.
μ²μ μλν λμλ νλ Έμλλ°, λ°©λ¬Έ μ¬λΆλ₯Ό λΆμκ³ λ€μ΄μμ λ, λΆμμ§ μκ³ λ€μ΄μμ λ λλ μ μκ°νμ§ μμμ νλ Έλ€. μ΄μ°¨νΌ κ·Έ μ§μ μ λμ°©ν κ±°λ©΄ μκ΄μμ§ μλ??λΌλ μκ°μ κ·Έλ¬λλ°, λ€μμ λ λΆμκ³ κ° μ μλ μλμ μ°¨μ΄κ° λ°μνλκΉ κ½€ ν° μ°¨μ΄μλ€.
/* 2020.12.12(ν )*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
//λμΌν μ’νμ λν΄μ, λ²½μ λΆμκ³ μ¨κ±°λ λ²½ λΆμμ§ μκ³ μ¨κ±°λ λ°©λ¬Έμ¬λΆ 체ν¬λ₯Ό λ¬λ¦¬ ν΄μ£Όμ΄μΌ νλ€.
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().trim().split(" ");
int N = Integer.parseInt(str[0]);
int M = Integer.parseInt(str[1]);
int[][] map = new int[N][M];
boolean[][][] visited = new boolean[2][N][M];
for(int i=0;i<N;i++) {
str = br.readLine().trim().split("");
for(int j=0;j<M;j++) {
map[i][j] = Integer.parseInt(str[j]);
}
}
Queue<int[]> que = new LinkedList<int[]>();
//nμμΉ, mμμΉ, λ²½λΆμ€ μ μλ νμ, νμ
que.offer(new int[] {0,0,1,1});
int[] tmp;
int n,m,wall;
int count=0;
int newN,newM;
boolean isArrived = false;
while(!que.isEmpty()) {
tmp = que.poll();
n = tmp[0];
m = tmp[1];
wall = tmp[2];
count = tmp[3];
if(n==N-1 && m==M-1) {
isArrived = true;
break;
}
int[][] dir = {{1,0},{-1,0},{0,1},{0,-1}};
for(int d=0;d<4;d++) {
newN = n + dir[d][0];
newM = m + dir[d][1];
if(newN>=0 && newN<N && newM>=0 && newM<M) {
if(map[newN][newM]==0 && !visited[wall][newN][newM]) {
visited[wall][newN][newM] = true;
que.offer(new int[] {newN,newM,wall,count+1});
}
else if(map[newN][newM]==1 && wall==1 && !visited[wall-1][newN][newM]) {
visited[wall-1][newN][newM] = true;
que.offer(new int[] {newN,newM,wall-1,count+1});
}
}
}
}
if (isArrived) System.out.println(count);
else System.out.println(-1);
}
}
'μκ³ λ¦¬μ¦ > λ¬Έμ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μλ°] λ°±μ€ 1956 - μ΄λ (0) | 2020.12.24 |
---|---|
[μλ°] λ°±μ€ 11404 - νλ‘μ΄λ (0) | 2020.12.19 |
[μλ°] λ°±μ€ 1697 - μ¨λ°κΌμ§ (1) | 2020.12.12 |
[μλ°] λ°±μ€ 7576 - ν λ§ν (0) | 2020.12.12 |
[μλ°] λ°±μ€ 1753 - μ΅λ¨κ²½λ‘ (0) | 2020.12.06 |