λ―Έλ‘νμ πͺ
N×Mν¬κΈ°μ λ°°μ΄λ‘ ννλλ λ―Έλ‘κ° μλ€.
λ―Έλ‘μμ 1μ μ΄λν μ μλ μΉΈμ λνλ΄κ³ , 0μ μ΄λν μ μλ μΉΈμ λνλΈλ€. μ΄λ¬ν λ―Έλ‘κ° μ£Όμ΄μ‘μ λ, (1, 1)μμ μΆλ°νμ¬ (N, M)μ μμΉλ‘ μ΄λν λ μ§λμΌ νλ μ΅μμ μΉΈ μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€. ν μΉΈμμ λ€λ₯Έ μΉΈμΌλ‘ μ΄λν λ, μλ‘ μΈμ ν μΉΈμΌλ‘λ§ μ΄λν μ μλ€.
μμ μμμλ 15μΉΈμ μ§λμΌ (N, M)μ μμΉλ‘ μ΄λν μ μλ€. μΉΈμ μ λμλ μμ μμΉμ λμ°© μμΉλ ν¬ν¨νλ€.
μ λ ₯
첫째 μ€μ λ μ μ N, M(2 ≤ N, M ≤ 100)μ΄ μ£Όμ΄μ§λ€. λ€μ Nκ°μ μ€μλ Mκ°μ μ μλ‘ λ―Έλ‘κ° μ£Όμ΄μ§λ€. κ°κ°μ μλ€μ λΆμ΄μ μ λ ₯μΌλ‘ μ£Όμ΄μ§λ€.
μΆλ ₯
첫째 μ€μ μ§λμΌ νλ μ΅μμ μΉΈ μλ₯Ό μΆλ ₯νλ€. νμ λμ°©μμΉλ‘ μ΄λν μ μλ κ²½μ°λ§ μ λ ₯μΌλ‘ μ£Όμ΄μ§λ€.
μμ
4 6
101111
101010
101011
111011
output : 15
νμ΄
νλμ μμμ μμ λμ°©μ κΉμ§μ 거리λ₯Ό ꡬνλ λ¬Έμ μ΄λ€.
νμ¬ μΉΈ(Pair cur
)μ μνμ’μ°λ‘ μ°κ²° λ μΉΈλ€μ λ°©λ¬Έν λ, νμ¬ μΉΈκ³Ό κ·Έ μΉΈμ 거리λ +1μ΄ λλ€(visited[nx][ny] = visited[cur.x][cur.y] + 1
).
μ΄λ₯Ό μ΄μ©ν΄μ, μμμ μμλΆν° λͺ¨λ μΉΈμ 거리λ₯Ό κ³μ°ν μ μλ€(μμμ μμ μΌλ§λ§νΌ λ¨μ΄μ Έ μλμ§)
μ½λ
Queue<Pair> q = new LinkedList<>();
q.add(new Pair(0, 0));
visited[0][0] = 1;
while (!q.isEmpty()) {
Pair cur = q.poll();
for (int dir = 0; dir < 4; dir++) {
int nx = cur.x + dx[dir];
int ny = cur.y + dy[dir];
if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
if (!map[nx][ny] || visited[nx][ny] != 0) continue;
visited[nx][ny] = visited[cur.x][cur.y] + 1;
q.add(new Pair(nx, ny));
}
}
System.out.println(visited[n - 1][m - 1]);
http://boj.kr/e265dd680e444136817e173f55695d6b