๋ฌธ์
https://www.acmicpc.net/problem/4485
๋ด ๋ฌธ์ ํ์ด
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class BOJ_4485 {
static class Node implements Comparable<Node> {
int x;
int y;
int w;
public Node(int x, int y, int w) {
this.x = x;
this.y = y;
this.w = w;
}
@Override
public int compareTo(Node o) {
return Integer.compare(this.w, o.w);
}
}
static int n, idx;
static int[][] map;
static int[][] dis;
static int[] dx = {0, 0, -1, 1};
static int[] dy = {-1, 1, 0, 0};
public static void Dijk() {
PriorityQueue<Node> pq = new PriorityQueue<>();
pq.add(new Node(0, 0, map[0][0])); // x, y, w
dis[0][0] = map[0][0];
while(!pq.isEmpty()) {
Node now = pq.poll();
int x = now.x;
int y = now.y;
int w = now.w;
for(int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if(nx < 0 || ny < 0 || nx >= n || ny >= n || dis[nx][ny] <= map[nx][ny] + w) continue;
dis[nx][ny] = map[nx][ny] + w;
pq.add(new Node(nx, ny, dis[nx][ny]));
}
}
}
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder out = new StringBuilder();
while(true) {
idx++;
n = Integer.parseInt(in.readLine());
if(n == 0) break;
map = new int[n][n];
dis = new int[n][n];
for(int i = 0; i < n; i++) {
st = new StringTokenizer(in.readLine());
for(int j = 0; j < n; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
dis[i][j] = Integer.MAX_VALUE;
}
}
Dijk();
out.append("Problem " + idx + ": " + dis[n-1][n-1] + "\n");
}
System.out.print(out);
}
}
๐ ๋ค์ต์คํธ๋ผ ๋ฌธ์
- Node ํด๋์ค๋ฅผ ๋ง๋ค๊ณ , ๋๋๋ฃจํผ์ ๊ฐ w ๊ธฐ์ค ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ ์ ์๋๋ก ํ๋ค.
- ์
๋ ฅ๋ฐ๋ ๋๊ตด ์ ๋ณด๋ฅผ map 2์ฐจ์ ๋ฐฐ์ด์ ์ ์ฅํ๊ณ ,
dis ๋ฐฐ์ด์ map๊ณผ ๊ฐ์ ํฌ๊ธฐ๋ก ํ๋ ๋ชจ๋ ์นธ์ MAX_VALUE๋ก ์ฑ์์ฃผ์๋ค. (์ต์๊ฐ ๊ฐฑ์ ์ํด) - Dijk ๋ฉ์๋์์๋ ์ต์ ๊ฐ์ ๊ฐ์ฅ ํจ์จ์ ์ผ๋ก ๊ตฌํ ์ ์๋๋ก PriorityQueue๋ฅผ ๋ง๋ค์๊ณ
ํ์ ์์์ ์ผ๋ก 0, 0 ์ขํ์ ๊ทธ์ ํด๋นํ๋ ๋๋๋ฃจํผ ๊ฐ์ pq์ ๋ฃ์ด์ฃผ์๋ค. - while์ ๋ณดํธ์ ์ธ bfs ํ์๊ณผ ๊ฐ๋ค.
pq์ ๋งจ ์์์ ๊ฐ์ ํ๋ ๋นผ์ค๊ณ , ๊ทธ ๊ฐ์ ํ ๋๋ก ์ํ์ข์ฐ ํ์์ ํด์ฃผ์๋ค.
dis[nx][ny] <= map[nx][ny] + w ์ด๋ฉด ํด๋น ๊ฒฝ๋ก๋ก๋ ๋์ด์ ์ต์๊ฐ์ผ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ ๋ป์ด๋ฏ๋ก,
์์ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ dis ๋ฐฐ์ด์ ์ต์๊ฐ์ผ๋ก ์ด๊ธฐํํ๊ณ , pq์๋ ์๋ก์ด ํ์ ์์์ ์ ์ถ๊ฐํ๋ค. - Dijk ๋ฉ์๋๊ฐ ์ข ๋ฃ๋๋ฉด dis ๋ฐฐ์ด์ ๊ฐ์ฅ ๋ง์ง๋ง ์นธ์ ์ ์ฅ๋ ๊ฐ์ ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
๐ก ํผ๋๋ฐฑ
- PriorityQueue๋ฅผ ์ฌ์ฉํ์ง ์์๋ ์ถฉ๋ถํ ํ์ด๊ฐ ๊ฐ๋ฅํ์ง๋ง,
์ฌ์ฉํ๊ณ ์ํ๊ณ ์ ์ฐจ์ด๊ฐ ๊ฑฐ์ ๋ ๋ฐฐ ์๊ฐ ์ฐจ์ด๊ฐ ๋๋๋ผ!!!!
'2๏ธโฃ Java > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java Algorithm] ์ ๋ก์์ฝ BOJ #10026 (0) | 2022.08.31 |
---|---|
[Java Algorithm] ํ์ถ BOJ #3055 (0) | 2022.08.31 |
[Java Algorithm] ๋ฏธ์ธ๋จผ์ง ์๋ ! BOJ #17144 (0) | 2022.08.31 |
[Java Algorithm] ์ฟผ๋ํธ๋ฆฌ BOJ #1992 (0) | 2022.08.18 |
[Java Algorithm] Z BOJ #1074 (0) | 2022.08.16 |
๋๊ธ