[λ°±μ€]16234λ² 'μΈκ΅¬ μ΄λ' λ¬Έμ νμ΄ - JavaScript
λμ΄λ: 골λ 4
νμ΄ μκ³ λ¦¬μ¦: BFS
λ¬Έμ
N×Nν¬κΈ°μ λ
μ΄ μκ³ , λ
μ 1×1κ°μ μΉΈμΌλ‘ λλμ΄μ Έ μλ€. κ°κ°μ λ
μλ λλΌκ° νλμ© μ‘΄μ¬νλ©°, rν cμ΄μ μλ λλΌμλ A[r][c]λͺ
μ΄ μ΄κ³ μλ€. μΈμ ν λλΌ μ¬μ΄μλ κ΅κ²½μ μ΄ μ‘΄μ¬νλ€. λͺ¨λ λλΌλ 1×1 ν¬κΈ°μ΄κΈ° λλ¬Έμ, λͺ¨λ κ΅κ²½μ μ μ μ¬κ°ν ννμ΄λ€.
μ€λλΆν° μΈκ΅¬ μ΄λμ΄ μμλλ λ μ΄λ€.
μΈκ΅¬ μ΄λμ ν루 λμ λ€μκ³Ό κ°μ΄ μ§νλκ³ , λ μ΄μ μλ λ°©λ²μ μν΄ μΈκ΅¬ μ΄λμ΄ μμ λκΉμ§ μ§μλλ€.
- κ΅κ²½μ μ 곡μ νλ λ λλΌμ μΈκ΅¬ μ°¨μ΄κ° Lλͺ μ΄μ, Rλͺ μ΄νλΌλ©΄, λ λλΌκ° 곡μ νλ κ΅κ²½μ μ μ€λ ν루 λμ μ°λ€.
- μμ 쑰건μ μν΄ μ΄μ΄μΌνλ κ΅κ²½μ μ΄ λͺ¨λ μ΄λ Έλ€λ©΄, μΈκ΅¬ μ΄λμ μμνλ€.
- κ΅κ²½μ μ΄ μ΄λ €μμ΄ μΈμ ν μΉΈλ§μ μ΄μ©ν΄ μ΄λν μ μμΌλ©΄, κ·Έ λλΌλ₯Ό μ€λ ν루 λμμ μ°ν©μ΄λΌκ³ νλ€.
- μ°ν©μ μ΄λ£¨κ³ μλ κ° μΉΈμ μΈκ΅¬μλ (μ°ν©μ μΈκ΅¬μ) / (μ°ν©μ μ΄λ£¨κ³ μλ μΉΈμ κ°μ)κ° λλ€. νΈμμ μμμ μ λ²λ¦°λ€.
- μ°ν©μ ν΄μ²΄νκ³ , λͺ¨λ κ΅κ²½μ μ λ«λλ€.
κ° λλΌμ μΈκ΅¬μκ° μ£Όμ΄μ‘μ λ, μΈκ΅¬ μ΄λμ΄ λ©°μΉ λμ λ°μνλμ§ κ΅¬νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ N, L, Rμ΄ μ£Όμ΄μ§λ€. (1 ≤ N ≤ 50, 1 ≤ L ≤ R ≤ 100)
λμ§Έ μ€λΆν° Nκ°μ μ€μ κ° λλΌμ μΈκ΅¬μκ° μ£Όμ΄μ§λ€. rν cμ΄μ μ£Όμ΄μ§λ μ μλ A[r][c]μ κ°μ΄λ€. (0 ≤ A[r][c] ≤ 100)
μΈκ΅¬ μ΄λμ΄ λ°μνλ μΌμκ° 2,000λ² λ³΄λ€ μκ±°λ κ°μ μ
λ ₯λ§ μ£Όμ΄μ§λ€.
μΆλ ₯
μΈκ΅¬ μ΄λμ΄ λ©°μΉ λμ λ°μνλμ§ μ²«μ§Έ μ€μ μΆλ ₯νλ€.
μμ μ λ ₯ 1
2 20 50
50 30
20 40
μμ μΆλ ₯ 1
1
νμ΄ μ½λ π‘
const fs = require('fs');
const file = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
const input = fs.readFileSync(file).toString().trim().split('\n');
class Queue {
constructor() {
this.items = {};
this.headIndex = 0;
this.tailIndex = 0;
}
enqueue(item) {
this.items[this.tailIndex] = item;
this.tailIndex++;
}
dequeue() {
const item = this.items[this.headIndex];
delete this.items[this.headIndex];
this.headIndex++;
return item;
}
peek() {
return this.items[this.headIndex];
}
size() {
return this.tailIndex - this.headIndex;
}
}
const [n, l, r] = input[0].split(' ').map(Number);
const maps = input.slice(1).map((row) => row.split(' ').map(Number));
const dx = [1, -1, 0, 0];
const dy = [0, 0, 1, -1];
let totalCount = 0;
const bfs = (x, y, visited) => {
const united = [[x, y]];
visited[x][y] = true;
let sum = maps[x][y];
const queue = new Queue();
queue.enqueue([x, y]);
while (queue.size() !== 0) {
const [x, y] = queue.dequeue();
for (let i = 0; i < 4; i++) {
const nx = x + dx[i];
const ny = y + dy[i];
if (nx < 0 || nx >= n || ny < 0 || ny >= n) continue;
if (visited[nx][ny]) continue;
const diff = Math.abs(maps[x][y] - maps[nx][ny]);
if (diff >= l && diff <= r) {
visited[nx][ny] = true;
queue.enqueue([nx, ny]);
sum += maps[nx][ny];
united.push([nx, ny]);
}
}
}
const avg = Math.floor(sum / united.length);
for (const unit of united) {
const [i, j] = unit;
maps[i][j] = avg;
}
};
while (true) {
const visited = Array.from({ length: n }, () => Array(n).fill(false));
let count = 0;
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
if (!visited[i][j]) {
bfs(i, j, visited);
count++;
}
}
}
if (count === n * n) break;
totalCount++;
}
console.log(totalCount);
νμ΄ ν΄μ€ π‘
λ μ΄μ μ΄λμ΄ νμ μμ λκΉμ§ BFS ν¨μλ₯Ό νΈμΆνλ€.
κ·Έλμ BFS ν¨μλ₯Ό νΈμΆνκ³ countλ₯Ό ν΄μ£Όλ©΄μ 맡μ μ 체 ν¬κΈ°λ§νΌ λ°λ³΅μ ν΄μ€λ€.
BFS ν¨μμμλ μμμ λν μ, ν, μ’, μ°λ‘ νμμ νλ€.
νμμ΄ κ°λ₯ν λ²μμ νμ¬ μμμ λ€μ μμμ κ°μ μ°¨μ΄κ° l μ΄μ r μ΄νλ©΄ κ³μ°μ λ€μ΄κ°λ€.
νλ² λ°©λ¬Έ νλ κ³³μ λ€μ λ°©λ¬Έν΄μ κ³μ°λμ§ μλλ‘ λ°©λ¬Έ μ²λ¦¬λ₯Ό ν΄μ£Όκ³ ,
νμ λ£μ΄μ£Όλ©΄μ sumμ μ΄λμ΄ νμν μ§μμ μΈκ΅¬μλ₯Ό λνλ€.
κ·Έλ¦¬κ³ μ΄λμ΄ νμν μ§μμ μΈκ΅¬ μμ μ’νλ₯Ό united λ°°μ΄μ λ£μ΄μ£Όλλ‘ νλ€.
νκ° λΉλκΉμ§ λ°λ³΅μ΄ λλλ©΄ united λ°°μ΄μ λ°λ³΅λ¬Έμ μ€ννλλ° mapsμ ν΄λΉ μ’νμ κ°μ νκ· κ°μΌλ‘ λ³νν΄ μ€λ€.