๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/18405)
<๊ฒฝ์์  ์ ์ผ>
๋ฌธ์  ํ์ด
๋ฒํธ๊ฐ ๋ฎ์ ์ข ๋ฅ์ ๋ฐ์ด๋ฌ์ค๋ถํฐ ์ฆ์์ํค๊ธฐ ์ํด์ ์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ์๋ค.
- my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class _18405_ { // ๊ฒฝ์์  ์ ์ผ
	static int[] dx= {-1,1,0,0}; // ์ํ์ข์ฐ
	static int[] dy= {0,0,-1,1};
	static PriorityQueue<int[]>queue;
	static int n, map[][];
	public static void main(String[] args) throws IOException {
		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st=new StringTokenizer(bf.readLine());
		
		n=Integer.parseInt(st.nextToken());
		int k=Integer.parseInt(st.nextToken());
		
		queue=new PriorityQueue<>(new Comparator<int[]>() {
			@Override
			public int compare(int[] o1, int[] o2) {
				return o1[0]-o2[0];
			}
		});
		
		map=new int[n][n];
		boolean[][]depth=new boolean[n][n];
		for(int i=0; i<n; i++) {
			st=new StringTokenizer(bf.readLine());
			for(int j=0; j<n; j++) {
				map[i][j]=Integer.parseInt(st.nextToken());
				if(map[i][j]!=0) { // ๋ฐ์ด๋ฌ์ค ๋ฒํธ์ ์์น ์ ์ฅ
					queue.add(new int[] {map[i][j],i,j});
					depth[i][j]=true;
				}
			}
		}
		
		st=new StringTokenizer(bf.readLine());
		int s=Integer.parseInt(st.nextToken()); // ์ด
		int x=Integer.parseInt(st.nextToken());
		int y=Integer.parseInt(st.nextToken());
		
		if(s!=0) {
			search(); 
			for(int i=0; i<s-1; i++) {
				for(int j=0; j<n; j++) {
					for(int l=0; l<n; l++) {
						if(depth[j][l]==false && map[j][l]>0) { // ์์ง ์ฆ์ํ์ง ์์ ๋ฐ์ด๋ฌ์ค
							depth[j][l]=true;
							queue.add(new int[] {map[j][l], j, l});
						}
					}
				}
				search(); 
				if(map[x-1][y-1]>0) break;
			}
		}
		System.out.println(map[x-1][y-1]);
	}
	private static void search() {
		while(!queue.isEmpty()) {
			int[] temp=queue.poll();
			for(int i=0; i<4; i++) {
				int a=temp[1]+dx[i];
				int b=temp[2]+dy[i];
				if(a>=0 && a<n && b>=0 && b<n && map[a][b]==0) {
					map[a][b]=temp[0];
				}
			}
		}
	}
}
-  Main
- n, k์ ๋ ฅ
 - map : ์ํ๊ด์ ์ ๋ณด
 - depth : ๋งค ์ด๋ง๋ค ๋ฐฉ๋ฌธ ์ฌ๋ถ ํ์ธํ๊ธฐ ์ํด ํ์
 - map์ ์ ๋ ฅ๋ฐ์ ๋ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌํ๋ฉด ์ฐ์ ์์ ํ์ [๋ฐ์ด๋ฌ์ค ๋ฒํธ, x์ขํ, y์ขํ]๋ก ๋ฃ๊ธฐ
 - 0์ด์ธ ๊ฒฝ์ฐ์๋ ๋ฐ๋ก answer ์ถ๋ ฅ!
 - 0์ด๊ฐ ์๋ ๊ฒฝ์ฐ search() ํธ์ถ + s-1์ด๋งํผ ์์ง ์ฆ์ํ์ง ์์ ๋ฐ์ด๋ฌ์ค ์ฐพ์์ ๋ฐ๋ณต! ์ด๋ฏธ (x-1, y-1) ์๋ฆฌ์ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌํ๋ค๋ฉด ์ค๊ฐ์ break! (=์ด๋ฏธ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌํ๋ฉด ๋ค๋ฅธ ๋ฐ์ด๋ฌ์ค๊ฐ ๋ค์ด๊ฐ ์ ์๊ธฐ ๋๋ฌธ)
 
 - search ( )
- queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต 
-> queue์์ poll ํ ๊ฐ ์์น์์ ์ํ์ข์ฐ๋ฅผ ํ๋ณํ์ฌ ์์ง ๋ฐ์ด๋ฌ์ค๊ฐ ์๋ ๊ณณ์ด๋ผ๋ฉด map์ ๋ฐ์ด๋ฌ์ค ์ฆ์ ํ์ 
 - queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต 
 
์๊ฐ๐ค
๋ถ๋ช ๋ต์ด ๋ง๋๋ฐ ์ ํ๋ ธ์๊น... ํ์ฐธ ๋ด๋ ์ฐพ์ ์ ์์๋ค.
์๋ฌด๋ฆฌ ๋ด๋ ์ฐพ์ ์ ์์๋ค..!!
๋ฐ๋ก ์ง๋ฌธ์ ์ฐพ์๋ณธ ๊ฒฐ๊ณผ S๊ฐ 0์ด์ผ ๋๋ฅผ ๊ณ ๋ คํ์ง ๋ชปํ ๊ฒ์ด์๋ค.
S!=0 ์กฐ๊ฑด์ ํ๋ ์ถ๊ฐํ๊ณ ๋์์ผ ๋ฐ๋ก ํด๊ฒฐ ~_~

'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Baekjoon] 16953_A โ B (0) | 2022.12.14 | 
|---|---|
| [Baekjoon] 10769_ํ๋ณตํ์ง ์ฌํ์ง (0) | 2022.12.13 | 
| [Baekjoon] 2206_๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ (0) | 2022.10.23 | 
| [Baekjoon] 1759_์ํธ ๋ง๋ค๊ธฐ (0) | 2022.08.15 | 
| [Baekjoon] 1715_์นด๋ ์ ๋ ฌํ๊ธฐ (0) | 2022.08.06 |