μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
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 |
- php νλ‘κ·Έλλ° μ λ¬Έ 3ν
- php νλ‘κ·Έλλ° μ λ¬Έ μ루μ
- C
- νμ΄μ¬
- php νλ‘κ·Έλλ° μ λ¬Έ μ°μ΅λ¬Έμ
- νμ΄μ½ μ΄λμ½λ
- Java
- php νλ‘κ·Έλλ° μ λ¬Έ μμ
- νλ¬ν°
- μλ°
- νμ΄μ½ μΉκ΅¬μ½λ
- νλ¬ν° κ°λ°νκ²½ μ€μ
- νμ΄μ½ μΆμ²μΈμ½λ
- CμΈμ΄
- php νλ‘κ·Έλλ° μ λ¬Έ λ¬Έμ νμ΄
- php νλ‘κ·Έλλ° μ λ¬Έ
- μ΅λ¨ κ²½λ‘
- λ°°μ΄
- php νλ‘κ·Έλλ°
- programmers
- μλ° μ€νλ§
- SWEA
- spring
- JAVA SPRING
- μ€νλ§
- νμ λΆκΈ°
- νμ΄μ½ μΆμ²μΈ
- Flutter
- λ°±μ€
- php
- Today
- Total
ImJay
[BOJ/Java] 1981. λ°°μ΄μμ μ΄λ λ³Έλ¬Έ
π [BOJ/Java] 1981. λ°°μ΄μμ μ΄λ
π‘ λ¬Έμ ν΄μ
N × N ν¬κΈ°μ 2μ°¨μ λ°°μ΄μ΄ μ£Όμ΄μ§λ€.
μΌμͺ½ μλ¨ (0,0)μμ μμνμ¬ μ€λ₯Έμͺ½ νλ¨ (N-1, N-1)κΉμ§ μ΄λνλ κ²½λ‘λ₯Ό μ°ΎμμΌ νλ€.
πΉ μ΄λ 쑰건
- μνμ’μ° μ΄λ κ°λ₯
- μ΄λ μ€ μ΅μκ°κ³Ό μ΅λκ°μ μ°¨μ΄(max - min)κ° μ΅μκ° λμ΄μΌ νλ€.
β
λͺ©ν:
μ΄λ κ²½λ‘μμμ μ΅μκ°κ³Ό μ΅λκ°μ μ°¨μ΄λ₯Ό μ΅μννλ κ°μ ꡬνλ κ²!
π νμ΄ κ³Όμ
1οΈβ£ μ΄λΆ νμ + BFS νμ©
β μ΄λΆ νμμ λ²μ:
- λ°°μ΄μ κ°μ΄ 0 ~ 200μ΄λ―λ‘ μ΅μκ°μ μ€μ ν μ μλ λ²μλ₯Ό μ΄λΆ νμ
- μ΅μκ°μ low, μ΅λκ°μ highλ‘ λκ³ νμ
β BFSλ‘ κ²½λ‘ νμ:
- lowλΆν° low + μ΅μ μ°¨μ΄λ₯Ό λ§μ‘±νλ κ°λ€μ BFSλ‘ νμ
- μ΄λ κ°λ₯νλ©΄ mid κ°μ μ€μ΄κ³ , λΆκ°λ₯νλ©΄ λλ¦°λ€
π» μ½λ (Java)
import java.util.*;
public class Main {
static int N;
static int[][] grid;
static int minVal = 200, maxVal = 0;
static int[] dx = {-1, 1, 0, 0};
static int[] dy = {0, 0, -1, 1};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
grid = new int[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
grid[i][j] = sc.nextInt();
minVal = Math.min(minVal, grid[i][j]);
maxVal = Math.max(maxVal, grid[i][j]);
}
}
System.out.println(binarySearch());
}
static int binarySearch() {
int left = 0, right = maxVal - minVal;
int result = right;
while (left <= right) {
int mid = (left + right) / 2;
boolean possible = false;
for (int minNum = minVal; minNum + mid <= maxVal; minNum++) {
if (bfs(minNum, minNum + mid)) {
possible = true;
break;
}
}
if (possible) {
result = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
return result;
}
static boolean bfs(int minLimit, int maxLimit) {
if (grid[0][0] < minLimit || grid[0][0] > maxLimit) return false;
Queue<int[]> queue = new LinkedList<>();
boolean[][] visited = new boolean[N][N];
queue.offer(new int[]{0, 0});
visited[0][0] = true;
while (!queue.isEmpty()) {
int[] cur = queue.poll();
int x = cur[0], y = cur[1];
if (x == N - 1 && y == N - 1) return true;
for (int d = 0; d < 4; d++) {
int nx = x + dx[d];
int ny = y + dy[d];
if (nx >= 0 && ny >= 0 && nx < N && ny < N && !visited[nx][ny]) {
int nextVal = grid[nx][ny];
if (nextVal >= minLimit && nextVal <= maxLimit) {
queue.offer(new int[]{nx, ny});
visited[nx][ny] = true;
}
}
}
}
return false;
}
}
β± μκ° λ³΅μ‘λ λΆμ
- μ΄λΆ νμ λ²μ: 0 ~ 200 (μ΅λ 200λ² λ°λ³΅)
- BFS νμ: N × N νμ (O(N^2))
- μ΅μ μ κ²½μ° 200 × N^2 → 200 × 100^2 = 2,000,000 (μΆ©λΆν κ°λ₯)
π§ λλ μ
π μ΄λΆ νμκ³Ό BFSλ₯Ό κ²°ν©ν λ¬Έμ μλ€.
β‘οΈ μ΄λΆ νμμΌλ‘ μ΅μ-μ΅λ λ²μλ₯Ό μ‘°μ νκ³ , BFSλ‘ νμ κ°λ₯ μ¬λΆλ₯Ό νλ³νλ λ°©μμ΄ ν΅μ¬μ΄μλ€.
β‘οΈ νμμ μ΄λΆ νμμ λ¨μν μ λ ¬ λ¬Έμ μμλ§ μ¬μ©νλλ°, λ²μλ₯Ό νμνλ λ°λ μ μ©ν μ μλ€λ μ μ΄ μ κΈ°νλ€!
π λν
μΌν λΆλΆμμ μ€μνκΈ° μ¬μ λ€.
β
μ΅μκ°(minLimit)λΆν° μ΅λκ°(maxLimit)κΉμ§μ λ²μλ₯Ό μ‘°μ νλ λ°©μμ΄ μ΅μνμ§ μμ μκ°μ΄ κ±Έλ Έλ€.
β
BFS νμ μ, μ΄κΈ°κ°μ΄ λ²μλ₯Ό λ²μ΄λλ©΄ μ¦μ false μ²λ¦¬νλ κ²μ΄ μ€μνλ€.
π μ΄λ° μ νμ λ¬Έμ λ₯Ό λ§μ΄ μ°μ΅νλ©΄ μ’μ κ² κ°λ€! π
'μκ³ λ¦¬μ¦ > BOJ - Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ/Java] 2931. κ°μ€κ΄ (0) | 2025.03.10 |
---|---|
[BOJ/Java] 11657. νμλ¨Έμ (0) | 2025.03.10 |
[BOJ/Java] 9370. λ―ΈνμΈ λμ°©μ§ (0) | 2025.03.10 |
[BOJ/Java] 1039. κ΅ν (0) | 2025.03.10 |
[BOJ/Java] 10942. ν°λ¦°λ둬? (0) | 2025.03.10 |