05-15 20:52
Recent Posts
Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

miinsun

[BAEKJOON] ๋ฐฑ์ค€ BFS 14497 :: ์ฃผ๋‚œ์˜ ๋‚œ ๋ณธ๋ฌธ

Algorithm/Baekjoon

[BAEKJOON] ๋ฐฑ์ค€ BFS 14497 :: ์ฃผ๋‚œ์˜ ๋‚œ

miinsun 2022. 7. 9. 21:46

๐Ÿ’ฌ  ๋ฌธ์ œ ์„ค๋ช…

์ฃผ๋‚œ์ด๋Š” ํฌ๊ฒŒ ํ™”๊ฐ€ ๋‚ฌ๋‹ค. ์ฑ…์ƒ ์„œ๋ž ์•ˆ์— ๋ชฐ๋ž˜ ๋จน์œผ๋ ค๊ณ  ์ˆจ๊ฒจ๋‘” ์ดˆ์ฝ”๋ฐ”๊ฐ€ ์‚ฌ๋ผ์กŒ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฃผ๋‚œ์ด๋Š” ๋ฏธ์ณ ๋‚ ๋›ฐ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ์‚ฌ์‹ค, ์ง„์งœ๋กœ ๋›ฐ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

‘์ฟต... ์ฟต...’

์ฃผ๋‚œ์ด๋Š” ์ ํ”„์˜ ํŒŒ๋™์œผ๋กœ ์ฃผ๋ณ€์˜ ๋ชจ๋“  ์นœ๊ตฌ๋“ค์„ ์“ฐ๋Ÿฌ๋œจ๋ฆฌ๊ณ (?) ๋ˆ„๊ตฐ๊ฐ€ ํ›”์ณ๊ฐ„ ์ดˆ์ฝ”๋ฐ”๋ฅผ ์ฐพ์œผ๋ ค๊ณ  ํ•œ๋‹ค. ์ฃผ๋‚œ์ด๋Š” N×Mํฌ๊ธฐ์˜ ํ•™๊ต ๊ต์‹ค ์–ด๋”˜๊ฐ€์—์„œ ๋›ฐ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ์ฃผ๋‚œ์ด์˜ ํŒŒ๋™์€ ์ƒํ•˜์ขŒ์šฐ 4๋ฐฉํ–ฅ์œผ๋กœ ์นœ๊ตฌ๋“ค์„ ์“ฐ๋Ÿฌ๋œจ๋ฆด(?) ๋•Œ ๊นŒ์ง€ ๊ณ„์†ํ•ด์„œ ํผ์ ธ๋‚˜๊ฐ„๋‹ค. ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ํ•ด์„œ, ํ•œ ๋ฒˆ์˜ ์ ํ”„๋Š” ํ•œ ๊ฒน์˜ ์นœ๊ตฌ๋“ค์„ ์“ฐ๋Ÿฌ๋œจ๋ฆฐ๋‹ค. ๋‹ค์Œ์˜ ์˜ˆ๋ฅผ ๋ณด์ž.
์ฃผ๋‚œ์ด๋ฅผ ๋œปํ•˜๋Š” *์€ (3, 4)์— ์žˆ๊ณ , ์ดˆ์ฝ”๋ฐ”๋ฅผ ๊ฐ€์ง„ ํ•™์ƒ #๋Š” (1, 2)์— ์žˆ๋‹ค. 0์€ ์žฅ์• ๋ฌผ์ด ์—†๋Š” ๋นˆ ๊ณต๊ฐ„์ž„์„ ๋œปํ•˜๊ณ , 1์€ ์นœ๊ตฌ๋“ค์ด ์„œ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ๋‹ค์Œ์€ ์ฃผ๋‚œ์ด์˜ ์ ํ”„์— ๋”ฐ๋ฅธ ์ƒ์กด(?) ํ•™์ƒ๋“ค์˜ ๋ณ€ํ™”์ด๋‹ค.
1๋‹จ๊ณ„
2๋‹จ๊ณ„
3๋‹จ๊ณ„
์œ„์˜ ์˜ˆ์‹œ์—์„œ ์ฃผ๋‚œ์ด๋Š” 3๋ฒˆ์˜ ์ ํ”„ ๋งŒ์— ์ดˆ์ฝ”๋ฐ”๋ฅผ ํ›”์ณ๊ฐ„ ๋ฒ”์ธ์„ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค!
์ฃผ๋‚œ์ด๋ฅผ ๋นจ๋ฆฌ ๋ฉˆ์ถฐ์•ผ ๊ต์‹ค์˜ ์•ˆ๋…•์„ ๋„๋ชจํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฃผ๋‚œ์ด์—๊ฒŒ ์ตœ์†Œ ์ ํ”„ ํšŸ์ˆ˜๋ฅผ ์•Œ๋ ค์ค˜์„œ ๊ต์‹ค์„ ์ง€ํ‚ค์ž.

 

๐Ÿ”จ  ์ž…์ถœ๋ ฅ ์˜ˆ

์ž…๋ ฅ 

  • ์ฒซ์งธ ์ค„์— ์ฃผ๋‚œ์ด๊ฐ€ ์œ„์น˜ํ•œ ๊ต์‹ค์˜ ํฌ๊ธฐ N, M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N, M ≤ 300)
  • ๋‘˜์งธ ์ค„์— ์ฃผ๋‚œ์ด์˜ ์œ„์น˜ x1, y1๊ณผ ๋ฒ”์ธ์˜ ์œ„์น˜ x2, y2๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ x1, x2 ≤ N, 1 ≤ y1, y2 ≤ M)
  • ์ดํ›„ N×M ํฌ๊ธฐ์˜ ๊ต์‹ค ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. 0์€ ๋นˆ ๊ณต๊ฐ„, 1์€ ์นœ๊ตฌ, *๋Š” ์ฃผ๋‚œ, #๋Š” ๋ฒ”์ธ์„ ๋œปํ•œ๋‹ค.

 

์ถœ๋ ฅ

  • ์ฃผ๋‚œ์ด๊ฐ€ ๋ฒ”์ธ์„ ์žก๊ธฐ ์œ„ํ•ด ์ตœ์†Œ ๋ช‡ ๋ฒˆ์˜ ์ ํ”„๋ฅผ ํ•ด์•ผ ํ•˜๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ 1)

5 7
3 4 1 2
1#10111
1101001
001*111
1101111
0011001

 

์˜ˆ์ œ ์ถœ๋ ฅ 1)

3

 

์˜ˆ์ œ ์ž…๋ ฅ 2)

3 5
3 5 1 1
#0000
11111
0000*

 

์˜ˆ์ œ ์ถœ๋ ฅ 2)

2

โ€‹

์˜ˆ์ œ ์ž…๋ ฅ 3)

3 3
2 2 1 1
#00
0*0
000

 

์˜ˆ์ œ ์ถœ๋ ฅ 3)

1

โ€‹

 

๐ŸŽ Hint

ํŒŒ๋™์€ ํ˜ธ์ˆ˜์— ๋–จ์–ด์ง„ ๋Œ๋งน์ด์˜ ๋ฌผ ํŒŒ๋™์ฒ˜๋Ÿผ ์ƒํ•˜์ขŒ์šฐ ๋„ค ๋ฐฉํ–ฅ์œผ๋กœ ์žฅ์• ๋ฌผ(์นœ๊ตฌ๋“ค)์„ ๋งŒ๋‚  ๋•Œ ๊นŒ์ง€ ๊ณ„์†ํ•ด์„œ ํผ์ ธ๋‚˜๊ฐ„๋‹ค.

์—์„œ ์ฒซ ์ ํ”„ ํ›„์—๋Š”

โ€‹๊ฐ€ ๋˜๋ฉฐ, ์ดํ›„ ํ•œ ๋ฒˆ์˜ ์ถ”๊ฐ€ ์ ํ”„๋ฅผ ํ†ตํ•ด ํŒŒ๋™์ด #์— ๋„๋‹ฌํ•˜์—ฌ ๋ฒ”์ธ์„ ์žก์„ ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ’ป  Main.java

/* ๋ฐฑ์ค€ - 14497 :: ์ฃผ๋‚œ์˜ ๋‚œ */
import java.io.*;
import java.util.*;

class Point{
	int x;
	int y;
	int cnt;
	
	Point(int x, int y){
		this.x = x;
		this.y = y;
	}
}

public class Main {
	static int[] dx = {-1, 0, 1, 0};
	static int[] dy = {0, 1, 0, -1};
	static char[][] board;
	static int n,m;
	
	public static void bfs(int x, int y, int[][] checked) {

		Deque<Point> q = new LinkedList<>();
		q.add(new Point(x, y));
		checked[x][y] = 1;
		
		while(!q.isEmpty()) {
			Point cur = q.poll();

			for(int i = 0; i < 4; i++) {
				int nx = cur.x + dx[i];
				int ny = cur.y + dy[i];
				
				// ์™ธ๊ณฝ์„  ๊ฒ€์‚ฌ
				if(nx >= 0 && nx < n && ny >= 0 && ny < m && checked[nx][ny] == 0) {
					if(board[nx][ny] == '1' || board[nx][ny] == '#') {
						checked[nx][ny] = checked[cur.x][cur.y] + 1;
						q.add(new Point(nx, ny));
					}
					else if(board[nx][ny] == '0') {
						checked[nx][ny] = checked[cur.x][cur.y];
						q.addFirst(new Point(nx, ny));
					}

					
				}
			}
		}
	}
	
	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());
		st = new StringTokenizer(br.readLine());
		
		// ์ฃผ๋‚œ์˜ ์œ„์น˜
		int x1 = Integer.parseInt(st.nextToken()) - 1;
		int y1 = Integer.parseInt(st.nextToken()) - 1;

		// ์ดˆ์ฝ”๋ฐ”์˜ ์œ„์น˜
		int x2 = Integer.parseInt(st.nextToken()) - 1;
		int y2 = Integer.parseInt(st.nextToken()) - 1;
		
		// ๊ต์‹ค ์ •๋ณด ์ž…๋ ฅ
		board = new char[n][m];
		for(int i = 0; i < n; i++) {
			String s = br.readLine();
			for(int j = 0; j < m; j++) {
				board[i][j] = s.charAt(j);
			}
		}
		
		// ์ฃผ๋‚œ์ด์˜ ์ ํ”„ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅ
		int[][] checked = new int[n][m];
		
		// ์ฃผ๋‚œ์ด์˜ ์œ„์น˜๋ฅผ ์ค‘์‹ฌ์œผ๋กœ bfs ์ง„ํ–‰
		bfs(x1, y1, checked);
		
		System.out.println(checked[x2][y2] - 1);
		br.close();
		
	}
}

 

Comments