728x90
처음에 DP 누적합 처럼 풀으려고 착각함.
시간초과 안나게 풀려면 다익스트라만 가능한듯
package a0401;
import java.io.*;
import java.util.*;
/*
dp인줄 알았는데 다익스트라로 해야됨
*/
public class 백준4485녹색옷젤다 {
static int[][] arr;
static int[][] sumarr;
static int size;
static class node implements Comparable<node>{
int xidx;
int yidx;
int weight;
node(int xidx, int yidx, int weight){
this.xidx = xidx;
this.yidx = yidx;
this.weight = weight;
}
@Override
public int compareTo(node o) {
return this.weight-o.weight;
}
}
static boolean check(int i, int j) {
if(0<=i&&i<size && 0<=j&&j<size)return true;
return false;
}
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int idx = 1;
while(true) {
size = Integer.parseInt(br.readLine());
if(size==0)break;
arr = new int[size][size];
sumarr = new int[size][size];
for(int i=0; i<size; i++) {
StringTokenizer ST = new StringTokenizer(br.readLine());
for(int j=0; j<size; j++) {
arr[i][j] = Integer.parseInt(ST.nextToken());
sumarr[i][j] = Integer.MAX_VALUE;
}
}
sumarr[0][0] = arr[0][0];
int result = daic();
sb.append("Problem " + idx + ": " +result+"\n");
idx++;
}
System.out.println(sb.toString());
}
static int[] di = {-1, 0, 1, 0};
static int[] dj = {0, 1, 0, -1};
static int daic() {
PriorityQueue<node> pq = new PriorityQueue<>();
pq.offer(new node(0,0,arr[0][0]));
while(!pq.isEmpty()) {
node now = pq.poll();
int nowi = now.xidx;
int nowj = now.yidx;
for(int d=0; d<4; d++) {
int ni = nowi+di[d];
int nj = nowj+dj[d];
if(check(ni,nj)) {
if(sumarr[ni][nj] > sumarr[nowi][nowj]+arr[ni][nj]) {
sumarr[ni][nj] = sumarr[nowi][nowj]+arr[ni][nj];
pq.offer(new node(ni, nj, sumarr[ni][nj]));
}
}
}
}
return sumarr[size-1][size-1];
}
}
'알고리즘 문제풀이' 카테고리의 다른 글
SWEA - 프로세서 연결하기 JAVA (0) | 2022.04.05 |
---|---|
[알고리즘] 백준17472 - 다리만들기2 java (0) | 2022.04.01 |
[알고리즘] 백준2667- 단지 번호 붙이기 java (0) | 2022.03.30 |
[알고리즘] SW expert - 최소 스패닝 트리 java (Prim 풀이) (0) | 2022.03.30 |
[알고리즘] SW expert - 최소 스패닝 트리 java (크루스칼 풀이) (0) | 2022.03.30 |