https://www.acmicpc.net/problem/31716
νμ΄
ν νΈλμμ 1μ΄ → Nμ΄λ‘ μ΄λνλ μ΅μ거리λ BFS λ리면 κΈλ°© λμ€λλ°
ν νΈλμμ λ€μ νΈλμΌλ‘ λμ΄κ°λ μ΄λ 거리λ₯Ό κΌΌκΌΌνκ² μ²λ¦¬ν΄μ€μΌ νλ€.
νΉν, ν΄λΉ νΈλ λμ°©μ μ νκ³Ό λ€μ νΈλ μμμ μ νμ λ§μΆ°μ£Όλ μμ μ΄ νμνλ€.
μ½λ
λ보기
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
long K = Long.parseLong(st.nextToken());
char[][] board = new char[2][N];
for (int r = 0; r < 2; r++) {
for (int c = 0; c < N; c++) {
board[r][c] = (char) br.read();
}
br.readLine();
}
br.close();
Queue<int[]> que = new LinkedList<>();
int[][][] dist = new int[2][N][2];
long moveWithinBlock = -1;
int startRow = 0;
int endRow = 0;
for (int r = 0; r < 2; r++) {
for (int c = 0; c < N; c++) {
dist[r][c][0] = -1;
}
}
if (board[0][0] == '.') {
que.add(new int[] { 0, 0 });
dist[0][0][0] = 0;
dist[0][0][1] = 0;
}
if (board[1][0] == '.') {
que.add(new int[] { 1, 0 });
dist[1][0][0] = 0;
dist[1][0][1] = 1;
}
while (!que.isEmpty()) {
int[] cur = que.remove();
int r = cur[0];
int c = cur[1];
if (c == N - 1) {
moveWithinBlock = dist[r][c][0];
startRow = dist[r][c][1];
endRow = r;
break;
}
if (board[r][c + 1] == '.') {
if (dist[r][c + 1][0] == -1) {
dist[r][c + 1][0] = dist[r][c][0] + 1;
dist[r][c + 1][1] = dist[r][c][1];
que.add(new int[] { r, c + 1 });
}
} else if (board[(r + 1) % 2][c] == '.') {
if (dist[(r + 1) % 2][c][0] == -1) {
dist[(r + 1) % 2][c][0] = dist[r][c][0] + 1;
dist[(r + 1) % 2][c][1] = dist[r][c][1];
que.add(new int[] { (r + 1) % 2, c });
}
} else {
System.out.println(-1);
return;
}
}
long moveToNextBlock = 0;
if (K > 1) {
if (startRow == endRow) {
moveToNextBlock = 1;
} else {
if (board[endRow][0] == '.') {
moveToNextBlock = 2;
} else if (board[(endRow + 1) % 2][N - 1] == '.') {
moveToNextBlock = 2;
} else {
System.out.println(-1);
return;
}
}
}
System.out.println(moveWithinBlock * K + moveToNextBlock * (K - 1));
}
}
ν μ€νΈ μΌμ΄μ€
// case 1:
2 1
#.
.#
expected output: -1
// case 2:
5 1
...#.
.#...
expected output: 5
// case 3:
5 3
...#.
.#...
expected output: 19
// case 4:
5 3
#....
..#..
expected output: 19
// case 5:
5 3
....#
..#..
expected output: 19
// case 6:
5 3
#....
..#.#
expected output: -1
// case 7:
5 3
#...#
..#..
expected output: 20
'Problem Solving' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] λ°±μ€ 31792 - νλΉλ―Έλμ΄ (Hard) (0) | 2024.05.10 |
---|---|
[Java] λ°±μ€ 2411 - μμ΄ν λ¨ΉκΈ° (0) | 2024.04.12 |
[Java] λ°±μ€ 1707 - μ΄λΆ κ·Έλν (0) | 2024.04.09 |
[Java] λ°±μ€ 16724 - νΌλ¦¬ λΆλ μ¬λμ΄ (0) | 2024.03.28 |
[Java] λ°±μ€ 7579 - μ± (0) | 2024.03.27 |