https://www.acmicpc.net/problem/14442
14442๋ฒ: ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ 2
์ฒซ์งธ ์ค์ N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 1,000), K(1 ≤ K ≤ 10)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์ M๊ฐ์ ์ซ์๋ก ๋งต์ด ์ฃผ์ด์ง๋ค. (1, 1)๊ณผ (N, M)์ ํญ์ 0์ด๋ผ๊ณ ๊ฐ์ ํ์.
www.acmicpc.net
๋ฌธ์ 
- N×M์ ํ๋ ฌ๋ก ํํ๋๋ ๋งต์ด ์๋ค. ๋งต์์ 0์ ์ด๋ํ ์ ์๋ ๊ณณ, 1์ ๋ฒฝ์ด ์๋ ๊ณณ์ ๋ํ๋ธ๋ค.
- (1, 1)์์ (N, M)์ ์์น๊น์ง ์ด๋ํ๋ ค ํ๋๋ฐ, ์ต๋จ ๊ฒฝ๋ก๋ก ์ด๋ํ๋ ค ํ๋ค.
- ํ ์นธ์์ ์ด๋ํ ์ ์๋ ์นธ์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ์นธ
 
- ํ ๊ฐ์ ๋ฒฝ์ ๋ถ์๊ณ ์ด๋ํ๋ ๊ฒ์ด ์ข ๋ ๊ฒฝ๋ก๊ฐ ์งง์์ง๋ค๋ฉด, ๋ฒฝ์ K๊ฐ ๊น์ง ๋ถ์๊ณ ์ด๋ํ์ฌ๋ ๋๋ค.
- ์ฒซ์งธ ์ค์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ถ๋ ฅํ๋ค. ๋ถ๊ฐ๋ฅํ ๋๋ -1์ ์ถ๋ ฅํ๋ค.
ํ์ด
๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ ์๋ฆฌ์ฆ์ ๋ฌธ์ ์ด๋ค. 1์์๋ ๋ฒฝ์ ํ ๊ฐ ๊น์ง ๋ถ์๊ณ ์ด๋ํ์ง๋ง, ์ด ๋ฌธ์ ์์๋ K๊ฐ๊น์ง ๋ถ์๊ณ ์ด๋ํ๋ค.
https://www.acmicpc.net/problem/2206
2206๋ฒ: ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ
N×M์ ํ๋ ฌ๋ก ํํ๋๋ ๋งต์ด ์๋ค. ๋งต์์ 0์ ์ด๋ํ ์ ์๋ ๊ณณ์ ๋ํ๋ด๊ณ , 1์ ์ด๋ํ ์ ์๋ ๋ฒฝ์ด ์๋ ๊ณณ์ ๋ํ๋ธ๋ค. ๋น์ ์ (1, 1)์์ (N, M)์ ์์น๊น์ง ์ด๋ํ๋ ค ํ๋๋ฐ, ์ด๋ ์ต๋จ ๊ฒฝ๋ก
www.acmicpc.net
๊ทธ๋์ ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ์ ๋ฌธ์  ํ์ด์ ์ ์ฌํ๋ค.
https://programmingiraffe.tistory.com/145
๋ฐฑ์ค - 2206๋ฒ : ๋ฒฝ๋ถ์๊ณ ์ด๋ํ๊ธฐ
https://www.acmicpc.net/problem/2206 2206๋ฒ: ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ N×M์ ํ๋ ฌ๋ก ํํ๋๋ ๋งต์ด ์๋ค. ๋งต์์ 0์ ์ด๋ํ ์ ์๋ ๊ณณ์ ๋ํ๋ด๊ณ , 1์ ์ด๋ํ ์ ์๋ ๋ฒฝ์ด ์๋ ๊ณณ์ ๋ํ๋ธ๋ค. ๋น์ ์ (1, 1)์
programmingiraffe.tistory.com
์ํ์ข์ฐ ์ธ์ ํ ์นธ์ผ๋ก ํ ์นธ์ฉ ์ด๋ํ์ ๋์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ๋ก, ํ ์นธ์ฉ ์ด๋ํ๋ฉฐ ์ฌ๋ฐฉํ์์ ํตํด ๋ชจ๋ ๊ฒฝ์ฐ์ ์์ ๋ํด ์ดํผ๊ณ ๋ชฉํ ์ง์ ์ ๋๋ฌํ์์ ํ์์ ์ข ๋ฃํด์ผ ํ๋ค. ๋ฐ๋ผ์ ํ๋ฅผ ์ด์ฉํ BFS ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ์๋ค.
1. ๋ฒฝ์ ์ง๊ธ๊น์ง ๋ช ๊ฐ ๋ถ์๋์ง ์ ๋ณด ์ ์ฅ
ํ์ ์ขํ ์ ๋ณด๋ฅผ ๋ฃ์ ๋, ํ๋ ฌ ์ขํ๊ฐ, ์ด๋ ๊ฑฐ๋ฆฌ๋ฟ๋ง ์๋๋ผ ์ง๊ธ๊น์ง ๋ช ๊ฐ์ ๋ฒฝ์ ๋ถ์์ ์ด ์๋์ง ์ ๋ณด๋ฅผ ์ ์ฅํ ํ์๊ฐ ์๋ค. ๋ฐ๋ผ์ ์ขํ ์ ๋ณด๋ฅผ ๋ด๋ Point๋ผ๋ ๊ฐ์ฒด์ int ํ์ ๋ณ์(hit)์ ์ถ๊ฐํด์คฌ๋ค.
2. ๋ฐฉ๋ฌธ์ฒดํฌ : boolean[K][N][M]
๋ฐฉ๋ฌธ์ฒดํฌ๋ฅผ ํ ๋, ํค๋น ์ง์ ์ ๋ํด ์ง๊ธ๊น์ง ๋ฒฝ์ ๋ช ๋ฒ ๋ถ์๊ณ ๋ฐฉ๋ฌธํ๋๊ฐ ์ํ๋๊ฐ๋ฅผ ํ์ํ๋ค. ํด๋น ์ง์ ์ ํ๋ฒ๋ ์๋ถ์๊ณ ๋ฐฉ๋ฌธํ ์๋ ์๊ณ , 1๋ฒ ๋ถ์๊ณ ๋ฐฉ๋ฌธํ ์๋ ์๊ณ , .. K๋ฒ ๋ถ์๊ณ ๋ฐฉ๋ฌธํ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋จผ์  n๋ฒ ๋ถ์๊ณ ๋ฐฉ๋ฌธํ์ด๋ ํ์ ๊ทธ ๊ฒฝ๋ก๊ฐ ๋์ด์ ํ์์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ๋ก๊ฐ ๋ ์๋ ์๋ค.
* ๋ฐฑ์ค์ ๋ฌธ์  ๋ด ๊ฒ์ํ์์ ๋ณธ๊ฑด๋ฐ, ๋ฐฐ์ด์ ์ฐจ์ ์ ์ธ ์์๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ํ์๊ฐ์ ์ํฅ์ ๋ฏธ์น๋ค๊ณ ํ๋ค.
(https://www.acmicpc.net/board/view/111938)
visited[11][1000][1000]๊ฐ visited[1000][1000][11] ๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ํจ์ฌ ์ ๋ค. ์ฑ์ ์ ๋๋ ธ์ ๋๋ 500ms ์ ๋ ์ฐจ์ด๊ฐ ๋ฌ๋ค.
3. ๋ฒฝ์ธ์ง ๋ฒฝ์ด ์๋์ง์ ๋ฐ๋ผ ํ์์ ๋ค๋ฅด๊ฒ ํ๋ค.
- ๋ฒฝ์ด ์๋๋ค
 - ์ง๊ธ๊น์ง n๊ฐ ๋ถ์ด ๋ฐฉ๋ฌธํ์ ์ด ์์ => n๊ฐ ๊ทธ๋๋ก ํ์
 
- ๋ฒฝ์ด๋ค
- ์ง๊ธ๊น์ง K๊ฐ ๋ฏธ๋ง ๋ถ์จ
- ์ง๊ธ๊น์ง n +1๊ฐ ๋ถ์ด ๋ฐฉ๋ฌธํ์ ์ด ์์=> n+1 ๋ถ์๊ณ ํ์
 
์ฝ๋
import java.io.*;
import java.util.*;
public class Main {
	static int N, M, K;
	static int[][] graph;
	static boolean[][][] visited;
	static int[] dx = {-1, 1, 0, 0};
	static int[] dy = {0, 0, -1, 1};
	
	static class Point {
		int x;
		int y;
		int count;
		int hit;
		
		public Point(int x, int y, int count, int hit) {
			this.x = x;
			this.y = y;
			this.count = count;
			this.hit = hit;
		}
	}
	
	public static void main(String[] args) throws IOException {
		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());
		
		graph = new int[N + 1][M + 1];
		visited = new boolean[K + 1][N + 1][M + 1]; //0 : ๋ฒฝ ์๋ถ์จ, 1~K: ๋ฒฝ n๊ฐ ๋ถ์จ
		
		for(int i = 1; i <= N; i++) {
			String row = br.readLine();
			
			for(int j = 1; j <= M; j++) {
				graph[i][j] = row.charAt(j - 1) - '0';
			}
		}
		
		int answer = bfs(1, 1);
		
		System.out.println(answer);
	}
	
	public static int bfs(int i, int j) {
		Queue<Point> queue = new LinkedList<>();
		
		queue.add(new Point(i, j, 1, 0));
		visited[0][i][j] = true;
		
		while(!queue.isEmpty()) {
			Point point = queue.poll();
			
			if(point.x == N && point.y == M) { // ์ข
๋ฃ ์กฐ๊ฑด
				return point.count;
			}
			
			for(int d = 0; d < 4; d++) {
				int nx = point.x + dx[d];
				int ny = point.y + dy[d];
				
				if(1 <= nx && nx <= N && 1 <= ny && ny <= M) {
					if(graph[nx][ny] == 0 && !visited[point.hit][nx][ny]) { //๋ฒฝ ์๋
						queue.add(new Point(nx, ny, point.count + 1, point.hit));
						visited[point.hit][nx][ny] = true;
					}else if(graph[nx][ny] == 1 && point.hit < K && !visited[point.hit + 1][nx][ny]) { //๋ฒฝ ์์, k๊ฐ ๋ฏธ๋ง ๋ถ์จ, n+1๋ถ์๊ณ  ๋ฐฉ๋ฌธํ์  ์์
						queue.add(new Point(nx, ny, point.count + 1, point.hit + 1)); //๋ฒฝ ๋ถ์๊ธฐ
						visited[point.hit + 1][nx][ny] = true;
					}
				}
			}
		}
		
		return -1;
	}
}
๊ฒฐ๊ณผ

1480ms ๊ฑธ๋ฆฌ๋ ๊ฒฐ๊ณผ : visited[11][1000][1000]
1992ms ๊ฑธ๋ฆฌ๋ ๊ฒฐ๊ณผ : visited[1000][1000][11]
๋ฐฐ์ด์ 
- 3์ฐจ์ ๋ฐฉ๋ฌธ์ฒดํฌ
- visited[11][1000][1000] ๊ฐ visited[1000][1000][11] ๋ณด๋ค ์๊ฐ์ด ์ ๊ฒ ๋ ๋ค
 
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋ฐฑ์ค 1261๋ฒ : ์๊ณ ์คํ (0) | 2023.09.16 | 
|---|---|
| ๋ฐฑ์ค 7785๋ฒ : ํ์ฌ์ ์๋ ์ฌ๋ (0) | 2023.08.30 | 
| ๋ฐฑ์ค 2206๋ฒ : ๋ฒฝ๋ถ์๊ณ ์ด๋ํ๊ธฐ (0) | 2023.08.30 | 
| ๋ฐฑ์ค 16724๋ฒ : ํผ๋ฆฌ ๋ถ๋ ์ฌ๋์ด (1) | 2023.08.29 | 
| ๋ฐฑ์ค 13460๋ฒ : ๊ตฌ์ฌ ํ์ถ2 (0) | 2023.08.02 | 
