๋ฌธ์

ํ์ด
์ด๋ฒ๋ฌธ์ ๋ ๋ฐฉ๊ธ์ ์ ํ์๋ ๋ฌธ์
๋ฌธ์ ์์ dis ๋ถ๋ถ๋ง ์์ ์ ํ๋ฉด๋ฉ๋๋ค.
์ ๋ฒ์๋ class Point ๊ฐ
int x, int y ๋ก ๊ตฌ์ฑ๋์๋ค๋ฉด,
์ด๋ฒ๋ฌธ์ ์์๋ ํ์ธต ๋ ์ถ๊ฐํ์ฌ
int x, int y, int z ๋ก ๊ตฌ์ฑํ๋ฉด ๋ฉ๋๋ค.
์ฝ๋๋ฅผ ๋ณด์์ฃ
์ฝ๋
์ฝ๋๋ฅผ ๋ณด์๋ฉด
์ด์ ๋ฌธ์ ์ ํ๋์ ์ฐจ์ด์ ์
for๋ฌธ์ ๋๋ 3์ค for๋ฌธ์ ๋์์
์ ๋ ฅ์ ๋ฐ๊ณ ,
๋ชจ๋ ๊ฒฝ์ฐ์ ์๊ฐ 3์ค for๋ฌธ์ ํตํด์
ํด๊ฒฐ ๋๋ค๋ ๊ฒ์ ๋๋ค.
์ด์ธ์๋ ๊ธฐ์กด ๋ฌธ์ ์ ๋์ผํ๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๋ฉด ๋ฉ๋๋ค.
package BaekJoon.step27_๊ทธ๋ํ์์ํ.ํ ๋งํ ; | |
import java.io.BufferedReader; | |
import java.io.IOException; | |
import java.io.InputStreamReader; | |
import java.util.LinkedList; | |
import java.util.Queue; | |
import java.util.StringTokenizer; | |
class Point { | |
public int x, y,z; | |
public Point(int x, int y, int z) { | |
this.x = x; | |
this.y = y; | |
this.z = z; | |
} | |
} | |
class N7569 { | |
static int[] dx = {-1, 0, 1, 0, 0, 0}; | |
static int[] dy = {0, 1, 0, -1, 0, 0}; | |
static int[] dz = {0, 0, 0, 0, -1, 1}; | |
static int[][][] board, dis; | |
static int n, m, h; | |
static Queue<Point> Q = new LinkedList<>(); // ์ ์ญ์ผ๋ก ์ก์ ์ด์ ๋ BFS ๋ ์ฌ์ฉํด์ผํ์ง๋ง, main ์์๋ ์ต์ ํ ๋งํ ๋ฅผ ๋ฃ์ด์ผํ๊ธฐ๋๋ฌธ | |
public static void bfs() { | |
while (!Q.isEmpty()) { | |
Point tmp = Q.poll(); | |
for (int i = 0; i < 6; i++) { | |
int nx = tmp.x + dx[i]; | |
int ny = tmp.y + dy[i]; | |
int nz = tmp.z + dz[i]; | |
if (nx >= 0 && nx < n && ny >= 0 && ny < m && nz >=0 && nz<h && board[nx][ny][nz] == 0) { | |
board[nx][ny][nz] = 1; | |
Q.offer(new Point(nx, ny, nz)); | |
dis[nx][ny][nz] = dis[tmp.x][tmp.y][tmp.z] + 1; | |
} | |
} | |
} | |
} | |
public static void main(String[] args) throws IOException { | |
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | |
StringTokenizer st = new StringTokenizer(br.readLine()); | |
m = Integer.parseInt(st.nextToken()); | |
n = Integer.parseInt(st.nextToken()); | |
h = Integer.parseInt(st.nextToken()); | |
board = new int[n][m][h]; | |
dis = new int[n][m][h]; | |
for(int k = 0 ; k<h; k++) { | |
for (int i = 0; i < n; i++) { | |
st = new StringTokenizer(br.readLine()); | |
for (int j = 0; j < m; j++) { | |
board[i][j][k] = Integer.parseInt(st.nextToken()); | |
if (board[i][j][k] == 1) Q.offer(new Point(i, j, k)); // ์ต์ ํ ๋งํ ๋ฃ์ด๋๊ธฐ - 0 ๋ ๋ฒจ | |
} | |
} | |
} | |
// bfs ๋๊ธฐ | |
bfs(); | |
boolean flag = true; // ์ต์ง ์์ ํ ๋งํ ๊ฒ์์ฉ | |
int answer = Integer.MIN_VALUE; | |
//board ๋ฅผ ๋๋ฉด์ ๊ฐ์ด 0์ธ ๊ฐ์ด ์์ผ๋ฉด flag ๋ฅผ false ๋ก ๋ง๋ค์ด์ค๋ค. | |
for(int k = 0 ; k<h; k++) { | |
for (int i = 0; i < n; i++) { | |
for (int j = 0; j < m; j++) { | |
if (board[i][j][k] == 0) flag = false; | |
} | |
} | |
} | |
// flag ๊ฐ์ด true ์ธ ๊ฒฝ์ฐ์๋ง max ๊ฐ์ ๋์ถํ๋๋ก for๋ฌธ์ ๋๋ค. | |
if (flag) { | |
for(int k = 0 ; k<h; k++) { | |
for (int i = 0; i < n; i++) { | |
for (int j = 0; j < m; j++) { | |
answer = Math.max(answer, dis[i][j][k]); | |
} | |
} | |
} | |
System.out.println(answer); | |
} else System.out.println(-1); | |
br.close(); | |
} | |
} |

'๐ป ๊ฐ๋ฐ๊ณต๋ถ > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Eric's ๋ฐฑ์ค] 2667๋ฒ - ๋จ์ง๋ฒํธ ๋ถ์ด๊ธฐ - Java ๐ฏ (2) | 2023.02.25 |
---|---|
[Eric's ๋ฐฑ์ค] 1012๋ฒ - ์ ๊ธฐ๋๋ฐฐ์ถ ๐ฅฌ - Java (0) | 2023.02.24 |
[Eric's ๋ฐฑ์ค] 7576๋ฒ - ํ ๋งํ - Java ๐ (3) | 2023.02.17 |
[Eric's ๋ฐฑ์ค] 9020๋ฒ - ๊ณจ๋๋ฐํ์ ์ถ์ธก - Java (0) | 2023.02.16 |
[Eric's ๋ฐฑ์ค] 6588๋ฒ - ๊ณจ๋๋ฐํ์ ์ถ์ธก - Java (0) | 2023.02.16 |