๐ ๋ฌธ์
๋ฌธ์
N×N ํฌ๊ธฐ์ ๊ณต๊ฐ์ ๋ฌผ๊ณ ๊ธฐ M๋ง๋ฆฌ์ ์๊ธฐ ์์ด 1๋ง๋ฆฌ๊ฐ ์๋ค. ๊ณต๊ฐ์ 1×1 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ํ ์นธ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ต๋ 1๋ง๋ฆฌ ์กด์ฌํ๋ค.
์๊ธฐ ์์ด์ ๋ฌผ๊ณ ๊ธฐ๋ ๋ชจ๋ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์ด ํฌ๊ธฐ๋ ์์ฐ์์ด๋ค. ๊ฐ์ฅ ์ฒ์์ ์๊ธฐ ์์ด์ ํฌ๊ธฐ๋ 2์ด๊ณ , ์๊ธฐ ์์ด๋ 1์ด์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ํ ์นธ์ฉ ์ด๋ํ๋ค.
์๊ธฐ ์์ด๋ ์์ ์ ํฌ๊ธฐ๋ณด๋ค ํฐ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ ์ง๋๊ฐ ์ ์๊ณ , ๋๋จธ์ง ์นธ์ ๋ชจ๋ ์ง๋๊ฐ ์ ์๋ค. ์๊ธฐ ์์ด๋ ์์ ์ ํฌ๊ธฐ๋ณด๋ค ์์ ๋ฌผ๊ณ ๊ธฐ๋ง ๋จน์ ์ ์๋ค. ๋ฐ๋ผ์, ํฌ๊ธฐ๊ฐ ๊ฐ์ ๋ฌผ๊ณ ๊ธฐ๋ ๋จน์ ์ ์์ง๋ง, ๊ทธ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ ์ง๋๊ฐ ์ ์๋ค.
์๊ธฐ ์์ด๊ฐ ์ด๋๋ก ์ด๋ํ ์ง ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
- ๋ ์ด์ ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๊ณต๊ฐ์ ์๋ค๋ฉด ์๊ธฐ ์์ด๋ ์๋ง ์์ด์๊ฒ ๋์์ ์์ฒญํ๋ค.
- ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ 1๋ง๋ฆฌ๋ผ๋ฉด, ๊ทธ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ผ๋ฌ ๊ฐ๋ค.
- ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ 1๋ง๋ฆฌ๋ณด๋ค ๋ง๋ค๋ฉด, ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ผ๋ฌ ๊ฐ๋ค.
- ๊ฑฐ๋ฆฌ๋ ์๊ธฐ ์์ด๊ฐ ์๋ ์นธ์์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ผ๋ก ์ด๋ํ ๋, ์ง๋์ผํ๋ ์นธ์ ๊ฐ์์ ์ต์๊ฐ์ด๋ค.
- ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ๊น์ด ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋ง๋ค๋ฉด, ๊ฐ์ฅ ์์ ์๋ ๋ฌผ๊ณ ๊ธฐ, ๊ทธ๋ฌํ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ฌ๋ฌ๋ง๋ฆฌ๋ผ๋ฉด, ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋๋ค.
์๊ธฐ ์์ด์ ์ด๋์ 1์ด ๊ฑธ๋ฆฌ๊ณ , ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์๋ค๊ณ ๊ฐ์ ํ๋ค. ์ฆ, ์๊ธฐ ์์ด๊ฐ ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ผ๋ก ์ด๋ํ๋ค๋ฉด, ์ด๋๊ณผ ๋์์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋๋ค. ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ผ๋ฉด, ๊ทธ ์นธ์ ๋น ์นธ์ด ๋๋ค.
์๊ธฐ ์์ด๋ ์์ ์ ํฌ๊ธฐ์ ๊ฐ์ ์์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ ๋ ๋ง๋ค ํฌ๊ธฐ๊ฐ 1 ์ฆ๊ฐํ๋ค. ์๋ฅผ ๋ค์ด, ํฌ๊ธฐ๊ฐ 2์ธ ์๊ธฐ ์์ด๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ 2๋ง๋ฆฌ ๋จน์ผ๋ฉด ํฌ๊ธฐ๊ฐ 3์ด ๋๋ค.
๊ณต๊ฐ์ ์ํ๊ฐ ์ฃผ์ด์ก์ ๋, ์๊ธฐ ์์ด๊ฐ ๋ช ์ด ๋์ ์๋ง ์์ด์๊ฒ ๋์์ ์์ฒญํ์ง ์๊ณ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ก์๋จน์ ์ ์๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๊ณต๊ฐ์ ํฌ๊ธฐ N(2 ≤ N ≤ 20)์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ณต๊ฐ์ ์ํ๊ฐ ์ฃผ์ด์ง๋ค. ๊ณต๊ฐ์ ์ํ๋ 0, 1, 2, 3, 4, 5, 6, 9๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ์๋์ ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
- 0: ๋น ์นธ
- 1, 2, 3, 4, 5, 6: ์นธ์ ์๋ ๋ฌผ๊ณ ๊ธฐ์ ํฌ๊ธฐ
- 9: ์๊ธฐ ์์ด์ ์์น
์๊ธฐ ์์ด๋ ๊ณต๊ฐ์ ํ ๋ง๋ฆฌ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์๊ธฐ ์์ด๊ฐ ์๋ง ์์ด์๊ฒ ๋์์ ์์ฒญํ์ง ์๊ณ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ก์๋จน์ ์ ์๋ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
โ๏ธ ํ์ด
์์ด๊ฐ ํ ๋ฒ ์์ง์ด๊ธฐ ์ ์ ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ์ต๋๋ก ์ด๊ธฐํ ์์ผ๋์ ๋ค์, ์ต์๊ฑฐ๋ฆฌ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ฐพ๋๋ก ํ๋ค. ๋ฌผ๊ณ ๊ธฐ๊ฐ ํ ๋ง๋ฆฌ ๋ฐ๊ฒฌ๋๋๋ผ๋ ์ต์๊ฐ์ ๊ฐฑ์ ๋๊ธฐ ๋๋ฌธ์ ์ฝ๋๊ฐ ์ ๋์๊ฐ๋ค.
โ๏ธ ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์์ ๋๊น์ง ๋ฌดํ ๋ฃจํ๋ฅผ ๋๋ฉฐ ๋ค์ ๋จน์ด๋ฅผ ํ์ํ๋ค
โ๏ธ ๋ค์ ๋ฌผ๊ณ ๊ธฐ๊น์ง์ ๊ฑฐ๋ฆฌ(sharkD)๋ฅผ MAX๋ก ์ก์๋๊ณ bfs๋ก ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ํ์ํ๋ฌ ๊ฐ๋ค.
โ๏ธ ๊ฑฐ๋ฆฌ๊ฐ ์ ์ผ ๊ฐ๊น๊ณ , ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ฐพ๋๋ค.
โ๏ธ ํ์์ด ๋๋๊ณ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ฐพ์์ก์ผ๋ฉด(sharkD != MAX) ํด๋น ๋ฌผ๊ณ ๊ธฐ์ ์์น(sharkR, sharkC)๋ก ์์ด์์น๋ฅผ ์ ๋ฐ์ดํธ ์์ผ์ค๋ค.
โ๏ธ ๋จน์ ๋ฌผ๊ณ ๊ธฐ์ ๊ฐ์๋ฅผ ์นด์ดํธํด์ค๋ค. ์ด ๋ ๊ฐ์๊ฐ ์์ด ๋ชธ์ง๊ณผ ๊ฐ์์ก์ผ๋ฉด, ์์ด ๋ชธ์ง์ ํค์์ฃผ๊ณ ์นด์ดํธ๋ ๋ค์ 0์ด ๋๋ค.
โ๏ธ ์์ด์ ์ด๋๊ฑฐ๋ฆฌ๊ฐ ์ด๋์๊ฐ์ด ๋๋ฏ๋ก, ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ ๋๋ง๋ค sharkD๋ฅผ ๊ฒฐ๊ณผ๊ฐ์ ๋ํด์ค๋ค.
๐โ๏ธ ์๊ฒฌ
์ผ์ฑ ๊ธฐ์ถ๋ก ์์ฒญ์์ฒญ ์ ๋ช ํ ๋ฌธ์ ์ด๋ค! ์์ด ์ ์ฃผ์ ์์์ ๋์ด์..?
ํ์ด์ฌ ์ฝ๋๋ค์ ์์ฒญ ๊น๋ํ๋๋ฐ, ์๋ฐ๋ก ๋ ์ ํ ์ ์๋์ง๋ ์ค๋ ฅ์ด ๋์ด๋ด์ผ ์ ๊ฒ ๊ฐ๋คใ ใ
์๋ฎฌ๋ ์ด์ ์ ๊ตณ์ด ๋ฐ๋ก ์ค๋ช ํ ๊ฑด ์๊ณ , ๋ฌธ์ ์ ๋จ๊ณ๋๋ก ์ฐจ๊ทผ์ฐจ๊ทผ ํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
๐ป ์์ค์ฝ๋: ์๋ฐ(Java)
public class Main_๋ฐฑ์ค_16236_์๊ธฐ์์ด_๊ณจ๋IV2 {
static int[][] map;
static int sharkR, sharkC, sharkD;
static int N, size, result, MAX = 401;
static int[] dr = {1, -1, 0, 0};
static int[] dc = {0, 0, 1, -1};
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
map = new int[N][N];
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
int n = Integer.parseInt(st.nextToken());
map[i][j] = n;
if(n==9) {//shark
sharkR = i;
sharkC = j;
}
}
}// input
int cnt = 0;//๋จน์ ๋ฌผ๊ณ ๊ธฐ ๊ฐ์
size = 2;//์์ํฌ๊ธฐ
while(true) {//one move
if(cnt==size) {
cnt = 0;
size++;
}
map[sharkR][sharkC] = 0;
sharkD = MAX;//๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ์ต๋๋ก ์ด๊ธฐํ
bfs(sharkR, sharkC);//ํ์
if(sharkD==MAX) break;//๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ค
cnt++;
result += sharkD;
}
System.out.println(result);
}// end of main
static private void bfs(int sr, int sc) {
boolean[][] visited = new boolean[N][N];
visited[sr][sc] = true;
Queue<int[]> queue = new LinkedList<int[]>();
queue.offer(new int[] {sr, sc, 0});
while(queue.size()>0) {
int[] cur = queue.poll();
int r = cur[0];
int c = cur[1];
int d = cur[2];
for (int i = 0; i < 4; i++) {
//new position
int nr = r+dr[i];
int nc = c+dc[i];
int nd = d+1;
//exception
if(nr<0 || nr>=N || nc<0 || nc>=N ||
map[nr][nc]>size || visited[nr][nc]) continue;
//move
queue.offer(new int[] {nr, nc, nd});
visited[nr][nc] = true;
//detection
if(map[nr][nc]>0 && map[nr][nc]<size) {
//๊ฑฐ๋ฆฌ๊ฐ ๋ ๊ฐ๊น์ด ๋ฌผ๊ณ ๊ธฐ ๋ฐ๊ฒฌ
if(nd<sharkD) {
sharkR = nr;
sharkC = nc;
sharkD = nd;
}
//๋จผ์ ๋ฐ๊ฒฌํ ๊ฒ๊ณผ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ ๋ฌผ๊ณ ๊ธฐ ๋ฐ๊ฒฌ
else if(nd==sharkD) {
// ๋งจ์๋จ ๋งจ์ข์ธก ๋ฌผ๊ณ ๊ธฐ์ธ ๊ฒฝ์ฐ
if(nr<sharkR || (nr==sharkR && nc<sharkC)) {
sharkR = nr;
sharkC = nc;
}
}
}
}//for loop
}//queue
}
}//end of class
๐ ๐ ๐
๏ผฐ๏ฝ๏ฝ๏ฝ๏ฝ ๏ฝ ๏ผข๏ฝ ๏ผณ๏ผก๏ผน
๐๐ฉ๐ข๐ฏ๐ฌ๐ด ๐ง๐ฐ๐ณ ๐ณ๐ฆ๐ข๐ฅ๐ช๐ฏ๐จ