π λ¬Έμ
μμ | μλ―Έ |
ꡬν | |
μ£Όμν μ | |
κ²°λ‘ |
μ±μ λ νκ΅ μμ λ‘ ν¬κΈ°κ° 8×8μΈ μ²΄μ€νμμ νμΆνλ κ²μμ λ§λ€μλ€. 체μ€νμ λͺ¨λ μΉΈμ λΉ μΉΈ λλ λ²½ μ€ νλμ΄λ€. μ±μ μ μΊλ¦ν°λ κ°μ₯ μΌμͺ½ μλ« μΉΈμ μκ³ , μ΄ μΊλ¦ν°λ κ°μ₯ μ€λ₯Έμͺ½ μ μΉΈμΌλ‘ μ΄λν΄μΌ νλ€.
μ΄ κ²μμ νΉμ§μ λ²½μ΄ μμ§μΈλ€λ μ μ΄λ€. 1μ΄λ§λ€ λͺ¨λ λ²½μ΄ μλμ μλ νμΌλ‘ ν μΉΈμ© λ΄λ €κ°κ³ , κ°μ₯ μλμ μμ΄μ μλμ νμ΄ μλ€λ©΄ λ²½μ΄ μ¬λΌμ§κ² λλ€. μ±μ μ μΊλ¦ν°λ 1μ΄μ μΈμ ν ν μΉΈ λλ λκ°μ λ°©ν₯μΌλ‘ μΈμ ν ν μΉΈμΌλ‘ μ΄λνκ±°λ, νμ¬ μμΉμ μ μμ μ μλ€. μ΄λν λλ λΉ μΉΈμΌλ‘λ§ μ΄λν μ μλ€.
1μ΄ λμ μ±μ μ μΊλ¦ν°κ° λ¨Όμ μ΄λνκ³ , κ·Έ λ€μ λ²½μ΄ μ΄λνλ€. λ²½μ΄ μΊλ¦ν°κ° μλ μΉΈμΌλ‘ μ΄λνλ©΄ λ μ΄μ μΊλ¦ν°λ μ΄λν μ μλ€.
μ±μ μ μΊλ¦ν°κ° κ°μ₯ μ€λ₯Έμͺ½ μ μΉΈμΌλ‘ μ΄λν μ μλμ§ μλμ§ κ΅¬ν΄λ³΄μ.
π μ λ ₯
8κ° μ€μ κ±Έμ³μ 체μ€νμ μνκ° μ£Όμ΄μ§λ€. '.'μ λΉ μΉΈ, '#'λ λ²½μ΄λ€. κ°μ₯ μΌμͺ½ μλ«μΉΈμ νμ λ²½μ΄ μλλ€.
π μΆλ ₯
μ±μ μ μΊλ¦ν°κ° κ°μ₯ μ€λ₯Έμͺ½ μ μΉΈμ λμ°©ν μ μμΌλ©΄ 1, μμΌλ©΄ 0μ μΆλ ₯νλ€.
π μμ μ λ ₯
π μμ½
- 체μ€νμ ν¬κΈ°λ 8x8λ‘ μ΄λ£¨μ΄μ Έμλ€.
- '.' μ λΉμΉΈ, '#' μ λ²½μ μλ―Ένλ€.
- 1μ΄λ§λ€ λ²½μ μλλ‘ λ΄λ €μ¨λ€.
- μΌλ¦ν°λ (μνμ’μ°, λκ°μ , κ·Έλλ‘) μ΄λν μ μλ€.
- μμ§μ΄λ©΄ 1μ΄κ° μλͺ¨λλ©°, λ€μμΌλ‘ λ²½μ΄ λ΄λ €μ¨λ€.
- μΌλ¦ν°λ μΌμͺ½ μλ(7, 0)μ μμΉνλ©°, μ€λ₯Έμͺ½ μ(0, 7)μ λμ°©ν μ μλμ§ μμλ΄μΌ νλ€.
π νμ΄
- BFSλ‘ νλ©΄ λκ² λ€κ³ μκ°μ΄ λ€μλ€.
- κ·Έλλ‘ κ΅¬νν΄λ λκ² μ§λ§, 3μ°¨μ λ°°μ΄μ μ΄μ©ν΄μ nμ΄μ λ²½μ΄ λ΄λ €μλμ§ μνλ₯Ό μ μ₯νλ€.
(μλ₯Ό λ€μλ©΄ wall[x][y][k]λ (x, y)μ kμ΄μ λ²½μ΄ λ΄λ €μλμ§ μνλ₯Ό μ μ₯ν μ μλ€.) - λ¨Όμ νμ κ°μ₯ μΌμͺ½(7, 0)μ νμ¬ μκ° 0μ΄λ₯Ό λ£λλ€.
- νλ₯Ό μννλ©΄μ μκ°μ΄ 8μ΄κ° λμ΄κ°λ κ²½μ°λ λμ°© μ§μ κΉμ§ μλ€λ©΄ λμ°©ν μ μλ€κ³ νλ¨νλ€.
μλνλ©΄ 8x8 체ν¬νμΌλ‘ μ΄λ£¨μ΄μ Έ μκΈ° λλ¬Έμ κ°μ₯ μμ μλ λ²½λ 7μ΄λ©΄ 맨 μλκΉμ§ λμ°© ν μ μλ€. - μ΄μ μ κ·Έλλ‘ μμ§μμ κ²½μ°λ₯Ό μν΄, kμ΄μ λ²½μ΄ μ‘΄μ¬νλ©΄ λ€λ₯Έ λ°©ν₯μ νμΈνμ§ μλλ‘ κ΅¬ννλ€.
- μ΄νλ‘λ (μνμ’μ°, λκ°μ , κ·Έλλ‘) μμ§μ΄λ©΄μ λ²μκ° λμ΄κ°λμ§ μ²΄ν¬νκ³ , kμ΄μ λ²½μ΄ μ‘΄μ¬νλμ§ νμΈνλ€.
- 쑰건μ λ§μΌλ©΄ νμ¬ μκ° + 1μ ν΄μ νμ λ£λλ€.
π μ½λ
import java.util.LinkedList;
import java.util.Queue;
public class BOJ16954 {
int[] dx = {0, -1, 0, 1, 1, -1, 1, -1};
int[] dy = {1, 0, -1, 0, 1, -1, -1, 1};
public int solution(char[][] board) {
int max = 8;
boolean[][][] wall = init(board, max);
Queue<Person> q = new LinkedList<>();
q.offer(new Person(7, 0, 0)); //μΌμͺ½ μλμμ μΆλ°
while (!q.isEmpty()) {
Person cur = q.poll();
if (cur.time >= max || cur.x == 0 && cur.y == 7) return 1; //8μ΄ μ΄μμ΄κ±°λ μ€λ₯Έμͺ½ μλ‘ λμ°©νλ©΄ κ°λ₯ν κ²μΌλ‘ νλ¨
if (wall[cur.x][cur.y][cur.time]) continue; //ν΄λΉ μκ°μ λ²½μ΄ μ‘΄μ¬νλ©΄ λ€λ₯Έ λ°©ν₯μ νμΈνμ§ μλλ€.
for (int i = 0; i < max; i++) { //μνμ’μ°, λκ°μ νμΈ
int nx = cur.x + dx[i];
int ny = cur.y + dy[i];
if (nx < 0 || ny < 0 || nx >= max || ny >= max) continue; //λ²μ λ²μ΄λλμ§ νμΈνκΈ°
if (wall[nx][ny][cur.time]) continue; //ν΄λΉ μκ°μ λ²½μ΄ μ‘΄μ¬νλ νμΈ
q.offer(new Person(nx, ny, cur.time + 1));
}
q.offer(new Person(cur.x, cur.y, cur.time + 1)); //μκ°μ λλ¦¬κ³ , μμ§μ΄μ§ μλ κ²½μ° νμ λ£κΈ°
}
return 0;
}
private boolean[][][] init(char[][] board, int max) {
boolean[][][] result = new boolean[max][max][max];
for (int i = 0; i < max; i++) {
for (int j = 0; j < max; j++) {
if (board[i][j] == '#') { //맨 μλκΉμ§ λ²½μ μ΄λνμ¬ μκ°μ 체ν¬νλ€.
int time = 0;
for (int k = i; k < max; k++) {
result[k][j][time++] = true;
}
}
}
}
return result;
}
static class Person {
int x, y, time; //x,y μ’νμ νμ¬ μκ°
public Person(int x, int y, int time) {
this.x = x;
this.y = y;
this.time = time;
}
}
}
16954λ²: μμ§μ΄λ λ―Έλ‘ νμΆ
μ±μ λ νκ΅ μμ λ‘ ν¬κΈ°κ° 8×8μΈ μ²΄μ€νμμ νμΆνλ κ²μμ λ§λ€μλ€. 체μ€νμ λͺ¨λ μΉΈμ λΉ μΉΈ λλ λ²½ μ€ νλμ΄λ€. μ±μ μ μΊλ¦ν°λ κ°μ₯ μΌμͺ½ μλ« μΉΈμ μκ³ , μ΄ μΊλ¦ν°λ κ°μ₯ μ€λ₯Έμͺ½
www.acmicpc.net
'Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
π 2019 μΉ΄μΉ΄μ€ λΈλΌμΈλ 곡μ±: νλ³΄ν€ (Java) (0) | 2020.05.03 |
---|---|
π€ 2020 μΉ΄μΉ΄μ€ λΈλΌμΈλ 곡μ±: μλ¬Όμ μ μ΄μ (Java) (0) | 2020.04.28 |
π νλ‘κ·Έλλ¨Έμ€: Lv3. μ κ΅ μ¬μ¬ (Java) (0) | 2020.04.25 |
π μΉ΄μΉ΄μ€ 2019 κ²¨μΈ μΈν΄μ: λΆλ μ¬μ©μ(Lv3) (0) | 2020.04.05 |
π μΉ΄μΉ΄μ€ 2019 κ²¨μΈ μΈν΄μ: ν¬λ μΈ μΈνλ½κΈ° κ²μ(Lv2) (0) | 2020.04.01 |