반응형
Notice
Recent Posts
Recent Comments
Link
It's easy, if you try
[goorm] 최소 이동 비용 (Java) / BFS / DP 본문
반응형
문제
https://level.goorm.io/exam/82306/%EC%B5%9C%EC%86%8C-%EC%9D%B4%EB%8F%99-%EB%B9%84%EC%9A%A9/quiz/1
풀이
import java.io.*;
import java.util.*;
class Main {
static int[][] map;
static int[][] dp;
static int n, m;
static int[] dx = {1, 0}; // 우, 하 이동
static int[] dy = {0, 1};
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
map = new int[n][m];
dp = new int[n][m];
for(int i=0; i< n; i++) {
st = new StringTokenizer(br.readLine());
for(int j=0; j < m; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
dp[i][j] = Integer.MAX_VALUE;
}
}
bfs(0,0);
System.out.println(dp[n-1][m-1]);
}
private static void bfs(int x, int y) {
Deque<int[]> dq = new ArrayDeque<>();
dq.offer(new int[] {x, y});
dp[x][y] = map[x][y];
while(!dq.isEmpty()) {
int nx, ny;
int[] pos = dq.poll();
for(int i=0; i<2; i++) {
nx = pos[0] + dx[i];
ny = pos[1] + dy[i];
if(nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
if(dp[nx][ny] > map[nx][ny] + dp[pos[0]][pos[1]]) {
dp[nx][ny] = dp[pos[0]][pos[1]] + map[nx][ny];
dq.offer(new int[] {nx, ny});
}
}
}
}
}
반응형
'알고리즘 > 자바(Java)' 카테고리의 다른 글
[프로그래머스] 메뉴 리뉴얼 (Java) / 조합 / 문자열 / HashMap (0) | 2021.07.06 |
---|---|
[프로그래머스] 이진 변환 반복하기 (Java) / 문자열 / 수학 / Stack (0) | 2021.07.02 |
[프로그래머스] 가장 먼 노드 (Java) / 다익스트라 알고리즘 (0) | 2021.06.30 |
[프로그래머스] 가장 먼 노드 (Java) / BFS (0) | 2021.06.30 |
[백준/boj] 1662: 압축 (Java) / 재귀 / 스택 (0) | 2021.06.28 |
Comments