μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- νλ¬ν°
- CμΈμ΄
- νμ΄μ½ μΆμ²μΈ
- php νλ‘κ·Έλλ° μ λ¬Έ λ¬Έμ νμ΄
- spring
- php νλ‘κ·Έλλ°
- Flutter
- php νλ‘κ·Έλλ° μ λ¬Έ μ°μ΅λ¬Έμ
- php νλ‘κ·Έλλ° μ λ¬Έ μ루μ
- λ°°μ΄
- μ€νλ§
- SWEA
- php
- μλ°
- νλ¬ν° κ°λ°νκ²½ μ€μ
- νμ΄μ½ μΆμ²μΈμ½λ
- νμ΄μ½ μ΄λμ½λ
- μλ° μ€νλ§
- programmers
- Java
- λ°±μ€
- νμ λΆκΈ°
- νμ΄μ½ μΉκ΅¬μ½λ
- JAVA SPRING
- php νλ‘κ·Έλλ° μ λ¬Έ μμ
- μ΅λ¨ κ²½λ‘
- νμ΄μ¬
- C
- php νλ‘κ·Έλλ° μ λ¬Έ 3ν
- php νλ‘κ·Έλλ° μ λ¬Έ
- Today
- Total
ImJay
[BOJ/Java] 6087. λ μ΄μ ν΅μ λ³Έλ¬Έ
π [BOJ/Java] 6087. λ μ΄μ ν΅μ
π λ¬Έμ λ§ν¬: λ°±μ€ 6087λ² - λ μ΄μ ν΅μ
π λ¬Έμ ν΄μ
2μ°¨μ 맡μμ λ κ°μ λ μ΄μ π¦κ° μ£Όμ΄μ§λ€.
λ μ΄μ λ **.(λΉ κ³΅κ°)**μμ μ΄λν μ μμΌλ©°, ***(λ²½)**μ ν΅κ³Όν μ μλ€.
μ΄λν λλ μνμ’μ° λ°©ν₯μΌλ‘λ§ κ°λ₯νλ©°,
κ±°μΈ (/ λλ \)μ μ€μΉνμ¬ λΉμ λ°©ν₯μ λ³κ²½ν μ μλ€.
β λͺ©νλ μμ λ μ΄μ μμ λμ°© λ μ΄μ κΉμ§ μ΅μνμ κ±°μΈμ μ€μΉνλ κ²μ΄λ€.
π οΈ νμ΄ κ³Όμ
μ΄ λ¬Έμ λ BFS + λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦μ μμ©νμ¬ ν΄κ²°ν μ μλ€.
μ¦, **μ°μ μμ ν(μ΅μ ν)**λ₯Ό μ¬μ©νμ¬ κ±°μΈ μ€μΉ νμκ° μ μ κ²½λ‘λΆν° νμνλ λ°©μμ΄λ€.
1οΈβ£ μ λ ₯ μ²λ¦¬ λ° μ΄κΈ°ν
- W x H ν¬κΈ°μ 맡 μ 보λ₯Ό μ λ ₯λ°κ³ , λ μ΄μ μ μμμ (C1)κ³Ό λμ°©μ (C2)μ μ°Ύλλ€.
- 4λ°©ν₯(μ, ν, μ’, μ°)μΌλ‘ νμμ μννλ©°, κ±°μΈμ μ€μΉν΄μΌλ§ λ°©ν₯μ λ°κΏ μ μλ€.
2οΈβ£ μ°μ μμ ν(BFS + λ€μ΅μ€νΈλΌ) νμ©
- (κ±°μΈ μ€μΉ κ°μ, x μ’ν, y μ’ν, μ§ν λ°©ν₯)μ μ μ₯νλ **μ°μ μμ ν(μ΅μ ν)**λ₯Ό μ¬μ©νλ€.
- κ±°μΈ μ€μΉ νμκ° μ μ κ²½μ°λΆν° νμνμ¬, λ μ μ κ±°μΈ κ°μλ‘ λμ°©νλ κ²½μ°λ₯Ό μ°Ύλλ€.
- λ°©λ¬Έν μμΉλ λ°©ν₯λ³λ‘ κΈ°λ‘νμ¬ μ€λ³΅ νμμ λ°©μ§νλ€.
3οΈβ£ μ΅μ κ±°μΈ μ€μΉ κ°μ μ°ΎκΈ°
- λμ°© μ§μ (C2)μ λμ°©νμ λμ κ±°μΈ κ°μ μ€ μ΅μκ°μ μΆλ ₯νλ€.
π» μ½λ ꡬν (Java)
import java.util.*;
public class Main {
static class Node implements Comparable<Node> {
int x, y, dir, mirrors;
public Node(int x, int y, int dir, int mirrors) {
this.x = x;
this.y = y;
this.dir = dir;
this.mirrors = mirrors;
}
@Override
public int compareTo(Node o) {
return this.mirrors - o.mirrors; // κ±°μΈ κ°μ κΈ°μ€μΌλ‘ μ°μ μμ ν μ λ ¬
}
}
static int W, H;
static char[][] map;
static int[][][] visited;
static int[] dx = { -1, 1, 0, 0 }; // μ, ν, μ’, μ°
static int[] dy = { 0, 0, -1, 1 };
static List<int[]> lasers = new ArrayList<>();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
W = sc.nextInt();
H = sc.nextInt();
map = new char[H][W];
visited = new int[H][W][4]; // λ°©ν₯λ³ λ°©λ¬Έ λ°°μ΄ (μνμ’μ°)
for (int i = 0; i < H; i++) {
String line = sc.next();
for (int j = 0; j < W; j++) {
map[i][j] = line.charAt(j);
if (map[i][j] == 'C') {
lasers.add(new int[] { i, j }); // λ μ΄μ μμΉ μ μ₯
}
}
}
System.out.println(bfs());
}
public static int bfs() {
PriorityQueue<Node> pq = new PriorityQueue<>();
int sx = lasers.get(0)[0], sy = lasers.get(0)[1];
int ex = lasers.get(1)[0], ey = lasers.get(1)[1];
for (int i = 0; i < 4; i++) {
visited[sx][sy][i] = 0;
pq.offer(new Node(sx, sy, i, 0)); // λͺ¨λ λ°©ν₯μμ μμ κ°λ₯
}
while (!pq.isEmpty()) {
Node cur = pq.poll();
if (cur.x == ex && cur.y == ey) return cur.mirrors; // λμ°©νλ©΄ μ’
λ£
for (int i = 0; i < 4; i++) {
int nx = cur.x + dx[i];
int ny = cur.y + dy[i];
int newMirrors = cur.mirrors + (cur.dir == i ? 0 : 1); // λ°©ν₯μ΄ λ°λλ©΄ κ±°μΈ μΆκ°
if (nx < 0 || ny < 0 || nx >= H || ny >= W || map[nx][ny] == '*') continue;
if (visited[nx][ny][i] == 0 || visited[nx][ny][i] > newMirrors) {
visited[nx][ny][i] = newMirrors;
pq.offer(new Node(nx, ny, i, newMirrors));
}
}
}
return -1; // λλ¬ λΆκ°λ₯ν κ²½μ°
}
}
β±οΈ μκ° λ³΅μ‘λ λΆμ
- BFS + λ€μ΅μ€νΈλΌ λ°©μμ΄λ―λ‘ **O(W × H log(W × H))**μ μκ° λ³΅μ‘λλ₯Ό κ°μ§λ€.
- 맡μ ν¬κΈ°κ° μ΅λ 100 × 100 = 10,000 μ΄λ―λ‘, log(W × H)λ₯Ό κ³ λ €ν΄λ μΆ©λΆν λΉ λ₯΄κ² λμνλ€.
- μ°μ μμ νλ₯Ό μ¬μ©νμ¬ μ΅μ κ±°μΈ κ°μλΆν° νμνλ―λ‘, λΆνμν νμμ μ€μΌ μ μλ€.
π‘ λλμ
β
λ¨μν BFSκ° μλ, μ΅μνμ κ±°μΈ μ€μΉ κ°μλ₯Ό μ°μ νμνλ λ°©μμ κ³ λ―Όν΄μΌ νλ€.
β
**μ°μ μμ ν(λ€μ΅μ€νΈλΌ)**λ₯Ό νμ©νλ©΄ λ ν¨μ¨μ μΈ νμμ΄ κ°λ₯νλ€λ μ μ΄ μ€μνλ€.
β
λ°©ν₯λ³λ‘ λ°©λ¬Έμ κ΄λ¦¬νλ **3μ°¨μ λ°°μ΄(visited[x][y][dir])**μ μ¬μ©νλ κ²μ΄ ν΅μ¬μ΄μλ€.
β
λ μ΄μ ν΅μ λ¬Έμ λ μ νμ μΈ κ·Έλν νμ λ¬Έμ λ‘, μ μ¬ λ¬Έμ μλ μ μ©ν μ μμ κ² κ°λ€!
π― μ΄ λ¬Έμ λ₯Ό ν΅ν΄ BFSμ λ€μ΅μ€νΈλΌλ₯Ό κ²°ν©νλ λ°©λ²μ μ΅ν μ μμλ€! π
'μκ³ λ¦¬μ¦ > BOJ - Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ/Java] 11049. νλ ¬ κ³±μ μμ (0) | 2025.03.10 |
---|---|
[BOJ/Java] 11066. νμΌ ν©μΉκΈ° (0) | 2025.03.10 |
[BOJ/Java] 6549. νμ€ν κ·Έλ¨μμ κ°μ₯ ν° μ§μ¬κ°ν (1) | 2025.03.09 |
[BOJ/Java] 9376. νμ₯ (0) | 2025.03.09 |
[BOJ/Java] 2749. νΌλ³΄λμΉ μ 3 (0) | 2025.03.09 |