https://www.acmicpc.net/problem/18405
๋ฌธ์
NxN ํฌ๊ธฐ์ ์ํ๊ด์ด ์๋ค. ์ํ๊ด์ 1x1 ํฌ๊ธฐ์ ์นธ์ผ๋ก ๋๋์ด์ง๋ฉฐ, ํน์ ํ ์์น์๋ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌํ ์ ์๋ค. ๋ชจ๋ ๋ฐ์ด๋ฌ์ค๋ 1๋ฒ๋ถํฐ K๋ฒ๊น์ง์ ๋ฐ์ด๋ฌ์ค ์ข ๋ฅ ์ค ํ๋์ ์ํ๋ค.
์ํ๊ด์ ์กด์ฌํ๋ ๋ชจ๋ ๋ฐ์ด๋ฌ์ค๋ 1์ด๋ง๋ค ์, ํ, ์ข, ์ฐ์ ๋ฐฉํฅ์ผ๋ก ์ฆ์ํด ๋๊ฐ๋ค. ๋จ, ๋งค ์ด๋ง๋ค ๋ฒํธ๊ฐ ๋ฎ์ ์ข ๋ฅ์ ๋ฐ์ด๋ฌ์ค๋ถํฐ ๋จผ์ ์ฆ์ํ๋ค. ๋ํ ์ฆ์ ๊ณผ์ ์์ ํน์ ํ ์นธ์ ์ด๋ฏธ ์ด๋ ํ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌํ๋ค๋ฉด, ๊ทธ ๊ณณ์๋ ๋ค๋ฅธ ๋ฐ์ด๋ฌ์ค๊ฐ ๋ค์ด๊ฐ ์ ์๋ค.
์ํ๊ด์ ํฌ๊ธฐ์ ๋ฐ์ด๋ฌ์ค์ ์์น ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, S์ด๊ฐ ์ง๋ ํ์ (X,Y)์ ์กด์ฌํ๋ ๋ฐ์ด๋ฌ์ค์ ์ข ๋ฅ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ง์ฝ S์ด๊ฐ ์ง๋ ํ์ ํด๋น ์์น์ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด, 0์ ์ถ๋ ฅํ๋ค. ์ด ๋ X์ Y๋ ๊ฐ๊ฐ ํ๊ณผ ์ด์ ์์น๋ฅผ ์๋ฏธํ๋ฉฐ, ์ํ๊ด์ ๊ฐ์ฅ ์ผ์ชฝ ์์ ํด๋นํ๋ ๊ณณ์ (1,1)์ ํด๋นํ๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด 3x3 ํฌ๊ธฐ์ ์ํ๊ด์ด ์๋ค๊ณ ํ์. ์๋ก ๋ค๋ฅธ 1๋ฒ, 2๋ฒ, 3๋ฒ ๋ฐ์ด๋ฌ์ค๊ฐ ๊ฐ๊ฐ (1,1), (1,3), (3,1)์ ์์นํด ์๋ค. ์ด ๋ 2์ด๊ฐ ์ง๋ ๋ค์ (3,2)์ ์กด์ฌํ๋ ๋ฐ์ด๋ฌ์ค์ ์ข ๋ฅ๋ฅผ ๊ณ์ฐํด๋ณด์.
1์ด๊ฐ ์ง๋ ํ์ ์ํ๊ด์ ์ํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
2์ด๊ฐ ์ง๋ ํ์ ์ํ๊ด์ ์ํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก 2์ด๊ฐ ์ง๋ ๋ค์ (3,2)์ ์กด์ฌํ๋ ๋ฐ์ด๋ฌ์ค์ ์ข ๋ฅ๋ 3๋ฒ ๋ฐ์ด๋ฌ์ค๋ค. ๋ฐ๋ผ์ 3์ ์ถ๋ ฅํ๋ฉด ์ ๋ต์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ฐ์ N, K๊ฐ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. \(1 \leq N \leq 200,1 \leq K \leq 1000\) ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฑธ์ณ์ ์ํ๊ด์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ์ N๊ฐ์ ์์๋ก ๊ตฌ์ฑ๋๋ฉฐ, ํด๋น ์์น์ ์กด์ฌํ๋ ๋ฐ์ด๋ฌ์ค์ ๋ฒํธ๊ฐ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. ๋จ, ํด๋น ์์น์ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ 0์ด ์ฃผ์ด์ง๋ค. ๋ํ ๋ชจ๋ ๋ฐ์ด๋ฌ์ค์ ๋ฒํธ๋ K์ดํ์ ์์ฐ์๋ก๋ง ์ฃผ์ด์ง๋ค. N+2๋ฒ์งธ ์ค์๋ S, X, Y๊ฐ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. (\(0 \leq S \leq 10,000, 1 \leq X, Y \leq N\))
์ถ๋ ฅ
S์ด ๋ค์ (X,Y)์ ์กด์ฌํ๋ ๋ฐ์ด๋ฌ์ค์ ์ข ๋ฅ๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ S์ด ๋ค์ ํด๋น ์์น์ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด, 0์ ์ถ๋ ฅํ๋ค.
ํ์ด
BFS๋ฅผ ์ด์ฉ
testCube ์ ๊ฐ์ ์ ๋ ฅ ๋ฐ์ ๋, (i, j) ์นธ์ k๋ฒ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌ ๐ pairList[k] = (i, j) ์ ์ฅ
Class pairWithTime(int x, int y, int time)
: time ์ด์ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌํ๋ (x, y)
์ฒ์ ์ ๋ ฅ๋ ๋ฐ์ด๋ฌ์ค ์นธ๋ค์ queue์ time = 0์ผ๋ก ์ถ๊ฐ -> ์ด ๊ฐ๋ค ๋ถํฐ ์ ์ผ ์์ โผ๏ธ
time = S ์ธ pairWithTime ์ด ๋์ค๋ฉด ์ข ๋ฃ โผ๏ธ
์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main_BOJ_18405_๊ฒฝ์์ ์ ์ผ {
static class pair{
int x;
int y;
pair(int x, int y){
this.x = x;
this.y = y;
}
}
static class pairWithTime{
int x;
int y;
int time;
pairWithTime(int x, int y, int time){
this.x = x;
this.y = y;
this.time = time;
}
}
static int N, K, S, X, Y;
static int[][] testTube;
static List<pair> pairList[];
static int[] dx = {-1, 0, 0, 1};
static int[] dy = {0, -1, 1, 0};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer = new StringTokenizer(br.readLine());
N = Integer.parseInt(stringTokenizer.nextToken());
K = Integer.parseInt(stringTokenizer.nextToken());
testTube = new int[N][N];
pairList = new ArrayList[K+1];
for(int i = 0 ; i < K+1 ; i++)
pairList[i] = new ArrayList<>();
for(int i = 0 ; i < N ; i++){
stringTokenizer = new StringTokenizer(br.readLine());
for(int j = 0 ; j < N ; j++){
int x = Integer.parseInt(stringTokenizer.nextToken());
testTube[i][j] = x;
if(x != 0)
pairList[x].add(new pair(i, j));
}
}
stringTokenizer = new StringTokenizer(br.readLine());
S = Integer.parseInt(stringTokenizer.nextToken());
X = Integer.parseInt(stringTokenizer.nextToken()) - 1;
Y = Integer.parseInt(stringTokenizer.nextToken()) - 1;
BFS();
System.out.println(testTube[X][Y]);
}
private static void BFS() {
Queue<pairWithTime> q = new LinkedList<>();
for(int i = 1 ; i <= K ;i++){
for(pair p : pairList[i]){
q.offer(new pairWithTime(p.x, p.y, 0));
}
}
while(!q.isEmpty()){
pairWithTime now = q.poll();
if(now.time == S) return;
for(int i = 0 ; i < 4; i++){
int nx = now.x + dx[i];
int ny = now.y + dy[i];
if(nx < 0 || N <= nx || ny < 0 || N <= ny || testTube[nx][ny] != 0) continue;
testTube[nx][ny] = testTube[now.x][now.y];
q.offer(new pairWithTime(nx, ny, now.time+1));
}
}
}
}
'์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ๋ฐฑ์ค / BOJ 9461 ] ํ๋๋ฐ ์์ด ( ์๋ฐ / JAVA ) (0) | 2021.11.02 |
---|---|
[ ๋ฐฑ์ค / BOJ 16943 ] ์ซ์ ์ฌ๋ฐฐ์น ( ์๋ฐ / JAVA ) (0) | 2021.10.28 |
[ ๋ฐฑ์ค / BOJ 1715 ] ์นด๋ ์ ๋ ฌํ๊ธฐ ( ์๋ฐ / JAVA ) (0) | 2021.10.28 |
[ ๋ฐฑ์ค / BOJ 1717 ] ์งํฉ์ ํํ ( ์๋ฐ / JAVA ) (0) | 2021.10.27 |
[ ๋ฐฑ์ค / BOJ 20665 ] ๋ ์์ค ๊ฑฐ๋ฆฌ๋๊ธฐ ( ์๋ฐ / JAVA ) (0) | 2021.10.27 |