티스토리 뷰

//알고리즘

1. bfs

 

2. 3차원 방문배열 사용

 -> 벽을 부시고 갈 때, 안 부시고 갈때 방문배열을 가지고  가야 함

더보기
import java.util.*;
import java.io.*;

public class 벽부수고이동하기2_14442 {
	static int N, M, K, map[][];
	static boolean v[][][];
	static int[] dr = { -1, 0, 1, 0 };
	static int[] dc = { 0, 1, 0, -1 };

	static class Point {
		int r, c, k, cnt;

		public Point(int r, int c, int k, int cnt) {
			super();
			this.r = r;
			this.c = c;
			this.k = k;
			this.cnt = cnt;
		}

	}

	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());
		K = Integer.parseInt(st.nextToken());

		v = new boolean[N][M][K + 1];
		map = new int[N][M];

		for (int i = 0; i < N; i++) {
			String str = br.readLine();
			for (int j = 0; j < M; j++) {
				map[i][j] = str.charAt(j) - '0';
			}
		}

		// 알고리즘
		System.out.println(bfs());

	}

	private static int bfs() {
		Queue<Point> q = new LinkedList<>();
		q.add(new Point(0, 0, K, 1));
		v[0][0][K] = true;
		Point p = null;

		while (!q.isEmpty()) {
			p = q.poll();
			if (p.r == N - 1 && p.c == M - 1) {
				return p.cnt;
			}

			for (int k = 0; k < 4; k++) {
				int nr = p.r + dr[k];
				int nc = p.c + dc[k];

				if (nr < 0 || nc < 0 || nr >= N || nc >= M || v[nr][nc][p.k])
					continue;
				if (map[nr][nc] == 1) {
					if (p.k > 0) {
						v[nr][nc][p.k - 1] = true;
						q.add(new Point(nr, nc, p.k - 1, p.cnt + 1));
					}
				} else {
					v[nr][nc][p.k] = true;
					q.add(new Point(nr, nc, p.k, p.cnt + 1));
				}

			}
		}

		return -1;

	}

}

 

※ 오랜만에 풀어봐서 3번만에 성공했다... 비슷한 유형문제를 풀어서 아무 생각없이 짜다가 틀렸음. 

 말이되고싶은원숭이? 이 문제랑 유형이 비슷한데 알고스팟문제랑 비슷한걸로 착각했다. 앞으로 문제를 더 꼼꼼하게 읽어봐야겠다. 

3차원 방문배열 그 전에는 int형으로 만들었는데 이 문제는 int형으로 만들면 틀릴거같다. 

'Algorithm' 카테고리의 다른 글

백준_연구소_14502  (0) 2021.01.23
백준_스도미노쿠_4574  (0) 2021.01.20
백준_구슬 탈출 2_13460  (0) 2021.01.18
백준_나무 조각_2947  (0) 2021.01.17
백준_행성연결_16398_Kruskal  (0) 2021.01.09
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/02   »
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
글 보관함