๋ฌธ์ (์ถ์ฒ: 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 |