티스토리 뷰
문제 - (www.acmicpc.net/problem/1261)
다익스트라 문제이다
📌주의할 점
- 내가 지금까지 시도해온 경로중에 최소가 되는 값을 저장해두는 배열이 필요하다. 코드에서는 brokens이라고 표현함
- 이 brokens배열은 MAX_VALUE로 초기화되어 있어야 함. (정답이 최소값을 구하는 문제이므로)
- bfs 메서드가 끝나고 나면 결국 우리가 구하고자 하는 답은 brokens배열의 가장 마지막번째에 존재함 (계속해서 기록해왔으므로)
😅실수
- 나는 이런식의 문제를 너무 dfs로 풀려고 한다.. 계속 파고드는 방식이므로 시간초과가 날 수밖에 없다! ~~를 어떻게 하는 최단 경로와 관련된 문제는 bfs로 접근하자
- 단 간선에 가중치가 있을 경우는 dfs, bfs를 고민해보아야 함
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
static int N;
static int M;
static char[][] map;
static int[] dx = { 0, 1, 0, -1 };
static int[] dy = { 1, 0, -1, 0 };
static int[][] brokens;
static class Point implements Comparable<Point> {
int y;
int x;
int broken;
public Point(int y, int x, int broken) {
this.y = y;
this.x = x;
this.broken = broken;
}
@Override
public int compareTo(Point o) {
return Integer.compare(this.broken, o.broken);
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
M = Integer.parseInt(st.nextToken());
N = Integer.parseInt(st.nextToken());
map = new char[N][M];
brokens = new int[N][M];
for (int i = 0; i < N; i++) {
map[i] = br.readLine().toCharArray();
Arrays.fill(brokens[i], Integer.MAX_VALUE);
}
bfs();
System.out.println(brokens[N - 1][M - 1]);
}
private static void bfs() {
PriorityQueue<Point> pq = new PriorityQueue<Point>();
pq.offer(new Point(0, 0, map[0][0] - '0'));
brokens[0][0] = map[0][0] - '0';
while (!pq.isEmpty()) {
Point cur = pq.poll();
int y = cur.y;
int x = cur.x;
int cost = cur.broken;
if (brokens[y][x] < cost)
continue;
for (int d = 0; d < 4; d++) {
int ny = y + dy[d];
int nx = x + dx[d];
if (ny < 0 || nx < 0 || ny >= N || nx >= M)
continue;
if (brokens[ny][nx] > brokens[y][x] + (map[ny][nx] - '0')) {
brokens[ny][nx] = brokens[y][x] + (map[ny][nx] - '0');
pq.offer(new Point(ny, nx, brokens[ny][nx]));
}
}
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 19237번 / Java / 어른상어 (0) | 2020.09.19 |
---|---|
[백준] 4485번 / Java / 녹색 옷 입은 애가 젤다지? (0) | 2020.09.06 |
[백준] 18513번 / Java / 샘터 (0) | 2020.09.05 |
[백준] 3109번 / Java / 빵집 (0) | 2020.08.27 |
[백준 BOJ] 16235번 / Java / 나무 재테크 (1) | 2020.08.15 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Access-Control-Allow-Origin
- 14891
- 브라우저 요청
- 구현
- 백준
- 구명보트
- java
- 코테
- dfs
- 프로그래머스
- 아기상어
- 드래곤 커브
- 그리디
- 배열순회
- 톱니바퀴
- header
- 큰 수 만들기
- 시뮬레이션
- withCredentials
- 코딩테스트
- 재귀
- Greedy
- 사다리 조작
- 완전탐색
- 코딩테스트 연습
- BOJ
- 우선순위큐
- 자바
- 16234
- 인구이동
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함