1 ๋ถ„ ์†Œ์š”

๐Ÿ“ [G4_1261] ์•Œ๊ณ ์ŠคํŒŸ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;

public class Main {
	static int N, M, min, cnt;
	static int[][] map;
	static int[][] v;
	static int[] dx = { 0, 0, 1, -1 };
	static int[] dy = { 1, -1, 0, 0 };

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");

		// ๊ฐ€๋กœํฌ๊ธฐ
		M = Integer.parseInt(st.nextToken());

		// ์„ธ๋กœ ํฌ๊ธฐ
		N = Integer.parseInt(st.nextToken());

		// 1,1 ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค
		map = new int[N + 1][M + 1];

		// ๋ˆ„์  ๋น„์šฉ
		v = new int[N + 1][M + 1];

		// ์ž…๋ ฅ
		for (int i = 1; i < N + 1; i++) {
			String str = br.readLine();
			String[] sstr = str.split("");
			for (int j = 1; j < M + 1; j++) {
				map[i][j] = Integer.parseInt(sstr[j-1]);
				v[i][j] = Integer.MAX_VALUE;
			}
		}

		v[1][1] = 0;
		bfs(1, 1);

		System.out.println(v[N][M]);
	}

	// bfs
	static void bfs(int x, int y) {
		Queue<int[]> q = new LinkedList<int[]>();
		
		q.offer(new int[] {x,y});
		
		while(!q.isEmpty()) {
			int cur[] = q.poll();
			
			for(int i=0; i<4; i++) {
				int nx = cur[0] + dx[i];
				int ny = cur[1] + dy[i];
				
				// ๋ฒ”์œ„ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ
				if(nx < 1 || ny < 1 || nx > M || ny >N ) continue;
				
				// ๋ฒฝ์ธ ๊ฒฝ์šฐ && ๋ˆ„์ ๋˜๋Š” ๋น„์šฉ์ด ๋” ๋งŽ์ด ๋“œ๋Š” ๊ฒฝ์šฐ ๊ฐฑ์‹ 
				if(map[ny][nx] == 1 && v[ny][nx] > v[cur[1]][cur[0]]+1) {
					v[ny][nx] = v[cur[1]][cur[0]]+1;
					q.offer(new int[] {nx,ny});
				}
				// ๋ฒฝ์ด ์•„๋‹Œ ๊ฒฝ์šฐ && ๋ˆ„์ ๋˜๋Š” ๋น„์šฉ์ด ๋” ๋งŽ์ด ๋“œ๋Š” ๊ฒฝ์šฐ ๊ฐฑ์‹  -> 1์„ ๋”ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค
				else if(map[ny][nx] == 0 && v[ny][nx] > v[cur[1]][cur[0]]) {
					v[ny][nx] = v[cur[1]][cur[0]];
					q.offer(new int[] {nx,ny});
				}
			}
		}
	}
}

๐Ÿค” ๋‚˜์˜ ์ƒ๊ฐ

์ฒ˜์Œ์— ๋ฌธ์ œ๋ฅผ ๋ณด์ž๋งˆ์ž ๊ฐ„๋‹จํ•œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด๊ตฌ๋‚˜~ ํ•˜๊ณ  dfs๋กœ ๋”ฑ ํ’€์—ˆ๋Š”๋ฐ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋–ด๋‹ค..
์›๋ž˜ v[][] ๋ฅผ boolean์œผ๋กœ ๋ฐฉ๋ฌธ์ฒดํฌ๋กœ ํ–ˆ๋Š”๋ฐ ๊ทธ๊ฒƒ๋ณด๋‹ค bfs๋ฅผ ํ™œ์šฉํ•˜์—ฌ intํ˜• ๋ฐฐ์—ด๋กœ ๋ˆ„์ ๋˜๋Š” ๋น„์šฉ์„ ์ €์žฅํ•ด์„œ ๊ณ„์† ๊ฐฑ์‹ ํ•ด ๋‚˜๊ฐ€์•ผ ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.
๊ทธ๋ž˜์„œ queue๋ฅผ ์ด์šฉํ•ด bfs๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค.
๋‹ค์Œ ๊ณต๊ฐ„์— ๋ฒฝ์ด ์žˆ์„ ๊ฒฝ์šฐ ๊ธฐ์กด ๋น„์šฉ์—๋‹ค +1 ์„ ํ•ด์„œ ๋‹ค์Œ ๋น„์šฉ๊ณผ ๋น„๊ต๋ฅผ ํ•ด ๋” ์ ์€ ๊ฒฝ์šฐ๋ฅผ ์„ ํƒํ•ด ์ฃผ์—ˆ๊ณ 
๋‹ค์Œ ๊ณต๊ฐ„์— ๋ฒฝ์ด ์—†์„ ๊ฒฝ์šฐ ๊ธฐ์กด ๋น„์šฉ ๊ทธ๋Œ€๋กœ ํ•ด์„œ ๋‹ค์Œ ๋น„์šฉ๊ณผ ๋น„๊ต๋ฅผ ํ•ด ๋” ์ ์€ ๊ฒฝ์šฐ๋ฅผ ์„ ํƒํ•ด ์ฃผ์—ˆ๋‹ค.
์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ž˜ ์ƒ๊ฐํ•ด์•ผ ํ•  ๋ฌธ์ œ์ด๋‹ค.

ํƒœ๊ทธ: , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: