Seize your moment! ๐Ÿ‘พ

์•ˆ๋…•ํ•˜์„ธ์š”. Eric์ž…๋‹ˆ๋‹ค. ์ œ ๋ธ”๋กœ๊ทธ์— ๋ฐฉ๋ฌธํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ป ๊ฐœ๋ฐœ๊ณต๋ถ€/Algorithm

[Eric's ๋ฐฑ์ค€] 7576๋ฒˆ - ํ† ๋งˆํ†  - Java ๐Ÿ…

Eric_ko 2023. 2. 17. 09:20

๋ฌธ์ œ

 

 

์•ˆ๋…•ํ•˜์„ธ์š”! Eric ์ž…๋‹ˆ๋‹ค! ์˜ค๋Š˜ ๊ฐ€์ ธ์˜จ ๋ฌธ์ œ๋Š” bfs๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” 

๋ฐฑ์ค€ 7576๋ฒˆ ํ† ๋งˆํ†  ๋ฌธ์ œ ์ž…๋‹ˆ๋‹ค!

 

๊ทธ๋Ÿฌ๋ฉด ๋ฌธ์ œํ’€์ด ์‹œ์ž‘ํ•ด๋ณผ๊นŒ์š”?

 

ํ’€์ด

 

ํ•ด๋‹น ๋ฌธ์ œ๋Š” bfs ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

 

์ €๋Š” ํ•ด๋‹น ์œ„์น˜์˜ ๊ฐ’์„ class Point ๋ผ๋Š” ๊ฐ’์œผ๋กœ ๊ด€๋ฆฌ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์šฐ์„  ํ† ๋งˆํ† ๊ฐ€ ๋ณด๊ด€๋˜๋Š” ์ฐฝ๊ณ ์—์„œ ์žˆ๋Š” input ๊ฐ’๋“ค์„ ์ž…๋ ฅํ•ด์ค๋‹ˆ๋‹ค.

์ด๋•Œ, ์ž…๋ ฅ๋˜๋Š” ๊ฐ’์ด 1 ์ด๋ฉด,

ํ•ด๋‹น ํ† ๋งˆํ† ๋Š” ์ต์€ํ† ๋งˆํ† ์ด๋ฏ€๋กœ ์˜†์œผ๋กœ ์›€์ง์ด๋ฉด์„œ ๊ทผ์ฒ˜ ํ† ๋งˆํ† ๋“ค์„ ์ต๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ต์€ ํ† ๋งˆํ†  ๋“ค์ด bfs๋ฅผ ๋Œ๋ฉด์„œ ์ƒ,ํ•˜,์ขŒ,์šฐ ์˜ ํ† ๋งˆํ† ๋“ค์„ ์ต๊ฒŒ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. ([]dx , []dy ์ด์šฉ)

์ด๋•Œ bfs๋ฅผ ๋Œ๋ฉด์„œ 

board[][] ์— ์ž…๋ ฅ๋œ ๊ฐ’์ด 1 ์ด๋ฉด, 

dis[][] ๋ผ๋Š” ๋™์ผํ•œ ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์—์„œ +1์”ฉ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

1์”ฉ ์ถ”๊ฐ€ํ•ด์ค€ ์ด์œ ๋Š”, Queue๊ฐ€ ํ•œํ„ด ๋Œ๋•Œ๋งˆ๋‹ค 1์ผ์”ฉ ์ถ”๊ฐ€ ๋˜๋ฏ€๋กœ

Queue๊ฐ€ ๋นˆํ†ต์ผ ๋ ๋•Œ๊นŒ์ง€ ๋Œ์•„์ค๋‹ˆ๋‹ค.

 

bfs๋ฅผ ๋‹ค ๋Œ๊ณ ๋‚˜์„œ๋Š”

์ต์ง€์•Š์€ ํ† ๋งˆํ† ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ

๋‹ค์‹œ for๋ฌธ์„ ๋•๋‹ˆ๋‹ค,

๋งŒ์•ฝ board์— ํ•˜๋‚˜๋ผ๋„ 0 ์ด ์กด์žฌํ•˜๋ฉด,

์ด ํ† ๋งˆํ† ํŒ์€ ๋‹ค ์ต์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ

๋งˆ์ง€๋ง‰์— -1์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

 

์ฝ”๋“œ

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 N7576 {
static int[] dx = {-1, 0, 1, 0};
static int[] dy = {0, 1, 0, -1};
static int[][] board, dis;
static int n, m;
static Queue<Point> Q = new LinkedList<>(); // ์ „์—ญ์œผ๋กœ ์žก์€ ์ด์œ ๋Š” BFS ๋„ ์‚ฌ์šฉํ•ด์•ผํ•˜์ง€๋งŒ, main ์—์„œ๋„ ์ต์€ ํ† ๋งˆํ† ๋ฅผ ๋„ฃ์–ด์•ผํ•˜๊ธฐ๋•Œ๋ฌธ
public static void bfs() {
while (!Q.isEmpty()) {
Point tmp = Q.poll();
for (int i = 0; i < 4; i++) {
int nx = tmp.x + dx[i];
int ny = tmp.y + dy[i];
if (nx >= 0 && nx < n && ny >= 0 && ny < m && board[nx][ny] == 0) {
board[nx][ny] = 1;
Q.offer(new Point(nx, ny));
dis[nx][ny] = dis[tmp.x][tmp.y] + 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());
board = new int[n][m];
dis = new int[n][m];
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < m; j++) {
board[i][j] = Integer.parseInt(st.nextToken());
if (board[i][j] == 1) Q.offer(new Point(i, j)); // ์ต์€ ํ† ๋งˆํ†  ๋„ฃ์–ด๋†“๊ธฐ - 0 ๋ ˆ๋ฒจ
}
}
// bfs ๋Œ๊ธฐ
bfs();
boolean flag = true; // ์ต์ง€ ์•Š์€ ํ† ๋งˆํ†  ๊ฒ€์ƒ‰์šฉ
int answer = Integer.MIN_VALUE;
//board ๋ฅผ ๋Œ๋ฉด์„œ ๊ฐ’์ด 0์ธ ๊ฐ’์ด ์žˆ์œผ๋ฉด flag ๋ฅผ false ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (board[i][j] == 0) flag = false;
}
}
// flag ๊ฐ’์ด true ์ธ ๊ฒฝ์šฐ์—๋งŒ max ๊ฐ’์„ ๋„์ถœํ•˜๋„๋ก for๋ฌธ์„ ๋ˆ๋‹ค.
if (flag) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
answer = Math.max(answer, dis[i][j]);
}
}
System.out.println(answer);
} else System.out.println(-1);
br.close();
}
}
class Point {
public int x, y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
}
view raw N7576.java hosted with โค by GitHub

Solved.ac ํ”„๋กœํ•„