CodingTest/Java
BOJ_7576 : ν λ§ν
Soom_1n
2023. 1. 30. 16:51
7576λ²: ν λ§ν
첫 μ€μλ μμμ ν¬κΈ°λ₯Ό λνλ΄λ λ μ μ M,Nμ΄ μ£Όμ΄μ§λ€. Mμ μμμ κ°λ‘ μΉΈμ μ, Nμ μμμ μΈλ‘ μΉΈμ μλ₯Ό λνλΈλ€. λ¨, 2 ≤ M,N ≤ 1,000 μ΄λ€. λμ§Έ μ€λΆν°λ νλμ μμμ μ μ₯λ ν λ§ν
www.acmicpc.net
πΈ λ¬Έμ λΆμ πΈ
- n x m ν¬κΈ°μ μ°½κ³ μ ν λ§ν κ° λμ¬μλ€.
- 1 : μ΅μ ν λ§ν , 0 : λ μ΅μ ν λ§ν , -1 : λΉ κ³΅κ°
- μ΅μ ν λ§ν λ νλ£¨κ° μ§λ λ λ§λ€ μνμ’μ° λ μ΅μ ν λ§ν λ₯Ό μ΅κ² λ§λ λ€.
- λ©°μΉ μ΄ μ§λμΌ ν λ§ν κ° λͺ¨λ μ΅λμ§ μΆλ ₯νλ€. λͺ¨λ μ΅μ§ λͺ»νλ©΄ -1 μ μΆλ ₯νλ€.
- μ΅μ ν λ§ν μ£Όλ³μ μ΅μ μ μλ ν λ§ν λ₯Ό νμ λ£κ³ BFSμ μ€ννλ€.
- λ©°μΉ μ΄ μ§λλμ§ νμΈν΄μΌ νλ―λ‘ μ΅μ μμ μΈ ν λ§ν λ€μ κ°μ νμ λ£μ§ μκ³ , μμ νμ μ μ₯νλ€.
- μ΄κΈ° νμ μμλ₯Ό λͺ¨λ κΊΌλ΄λ©΄ μμνλ₯Ό νμΈν΄ μμκ° μλμ§(μμΌλ‘ μ΅μ ν λ§ν κ° μλμ§) νμΈνλ€.
- μμ νμ μμλ₯Ό μ΄κΈ° νμ 볡μ¬νκ³ , μμ νλ λΉμλ²λ¦°λ€.
- μμ νμ κ°μ΄ μμ λ κΉμ§ λ°λ³΅νλ€.
- n x m ν¬κΈ°μ μ°½κ³ λ₯Ό μνν΄ λμ΅μ ν λ§ν κ° μλμ§ νμΈνλ€.
- μμΌλ©΄ -1μ μΆλ ₯νλ€.
- μμΌλ©΄ μ§λκ° λ μ§λ₯Ό μΆλ ₯νλ€.
πΈ μ½λ πΈ
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 1) input
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
int[][] arr = new int[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
arr[i][j] = sc.nextInt();
}
}
// 2) BFS
int[] dx = {-1, 0, 1, 0};
int[] dy = {0, 1, 0, -1};
int day = 0;
Queue<Pair> que = new LinkedList<>();
Queue<Pair> temp = new LinkedList<>();
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (arr[i][j] == 1) {
for (int k = 0; k < 4; k++) {
int x = i + dx[k];
int y = j + dy[k];
if (0 <= x && x < n && 0 <= y && y < m && arr[x][y] == 0) {
temp.add(new Pair(x, y));
}
}
}
}
}
while (!temp.isEmpty()) {
day++;
que = temp;
temp = new LinkedList<>();
while (!que.isEmpty()) {
Pair p = que.poll();
arr[p.x][p.y] = 1;
for (int i = 0; i < 4; i++) {
int x = p.x + dx[i];
int y = p.y + dy[i];
if (0 <= x && x < n && 0 <= y && y < m && arr[x][y] == 0) {
arr[x][y] = 1;
temp.add(new Pair(x, y));
}
}
}
}
boolean flag = false;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (arr[i][j] == 0) {
flag = true;
break;
}
}
}
if (flag)
System.out.println(-1);
else
System.out.println(day);
}
private static class Pair {
int x, y;
public Pair(int x, int y) {
this.x = x;
this.y = y;
}
}
}
πΈ μ½λ ν΄μ πΈ
- μ’νλ₯Ό μ μ₯νκΈ° μν΄ Pairν΄λμ€λ₯Ό μ μνλ€.
- μ
λ ₯
- n X m ν¬κΈ° μ°½κ³ μ ν λ§ν μ 보λ₯Ό 2μ°¨μ λ°°μ΄ arrμ μ μ₯νλ€.
- BFS
- 2κ°μ ν que, tempλ₯Ό μ μΈνλ€.
- tempμ μ΄κΈ°κ°μ λ£μ΄μ£ΌκΈ° μν΄, λ¨Όμ arrλ₯Ό μννλ€.
- κ°μ΄ 1μ΄λ©΄ μνμ’μ°λ₯Ό νμΈν΄ μμΌλ‘ μ΅μ ν λ§ν κ° μλμ§ νμΈνλ€.
- μμΌλ‘ μ΅μ ν λ§ν μ μ’νλ₯Ό tempμ λ£μ΄μ€λ€.
- ν tempκ° λΉ λκΉμ§ λ€μ κ³μ°μ λ°λ³΅νλ€.
- ν λ§ν κ° λͺ¨λ μ΅μλ κΉμ§ νμν λ μ§ day λ³μλ₯Ό +1 νλ€.
- queμ tempλ₯Ό 볡μ¬νκ³ , tempλ μ΄κΈ°ννλ€.
- ν queκ° λΉ λκΉμ§ κ³μ°μ λ°λ³΅νλ€.
- queμ μμλ₯Ό pollνλ€.
- ν΄λΉ μ’νμ κ°μ 1λ‘ λ³κ²½νλ€. (tempμ μ΄κΈ°ν λλ¬Έμ΄λ―λ‘, day == 1μμλ§ μ€ν λ¨)
- μνμ’μ° 4λ°©ν₯μ νμΈνλ€.
- μνμ’μ° μΈλ±μ€κ° μ°½κ³ λ²μ λ΄μ΄λ©° κ°μ΄ 0μ΄λ©΄,
ν΄λΉ μ’νμ κ°μ 1λ‘ λ°κΎΈκ³ tempμ Pairκ°μ²΄ μ’νλ₯Ό μΆκ°νλ€.
- μνμ’μ° μΈλ±μ€κ° μ°½κ³ λ²μ λ΄μ΄λ©° κ°μ΄ 0μ΄λ©΄,
- μΆλ ₯
- μ°½κ³ arrλ₯Ό μνν΄ λμ΅μ ν λ§ν (0)μ΄ λ¨μμλμ§ νμΈνλ€.
- λ¨μμμΌλ©΄ -1, μμΌλ©΄ dayλ₯Ό μΆλ ₯νλ€.
- μ°½κ³ arrλ₯Ό μνν΄ λμ΅μ ν λ§ν (0)μ΄ λ¨μμλμ§ νμΈνλ€.
πΈ end πΈ
- 골λ 5 μΉκ³ λ λΉκ΅μ μ¬μ λ κ² κ°λ€.
- BFSμ μ΅μνκ³ , λ¬Έμ λ₯Ό μ΄μ μ ν λ² λ΄€μ΄μ κ·Έλ°λ― νλ€.
- μ²μ ν tempμ κ°μ μ΄κΈ°ν ν λ, BFSμ μμͺ½ while μ²λΌ μ’νPairκ°μ²΄λ₯Ό λ£μΌλ©΄μ κ°μ 1λ‘ λ°κΏ¨λλ λ€μ forλ¬Έμ μν₯μ΄ κ°λ€.
- κ·Έλμ BFS μμͺ½ whileλ¬Έμ arr[p.x][p.y] = 1μ΄λΌλ μ½λλ₯Ό λ£μλλ°, dayκ° 1μΌλλ§ μλνκΈ° λλ¬Έμ μ’ μμ¬μ λ€.
- κ·Έλ λ€κ³ κ°μ₯ μμͺ½ ifλ¬Έμμ 1μ λ£μ΄μ£Όλκ±Έ λΉΌλ©΄ μ€λ³΅μ΄ λ§μμ§λ€.
- λ¬Έμ νμ
λ° μ½λ© μ€κ³λ₯Ό μ μ΄κ°λ©° νμ΄νμ§λ§, λ³λ‘ λμμ΄ λμ§ μμ κ² κ°μ μμ½λ€.
- μμ§ λ¬Έμ λ₯Ό μ μ΄κ°λ©° νΈλκ² μ΅μνμ§ μμ κ² κ°λ€.
- λ°λ‘λ λ§λ€μ΄λ΄€μΌλ©΄ μ’μμν λ° λ·μ¬μ΄ μ’ λΆμ‘±νλ€.
- μ§μ μλ΅μμ λ΅λ³μ μ μ΄λ΄€λλ°, μμ ν μ§λ¬ΈμλΆ μ½λκ° 2λ°° λ λΉ¨λλ€...
728x90