๋ฌธ์
NxN ํฌ๊ธฐ์ ์ํ๊ด์ด ์๋ค. ์ํ๊ด์ 1x1 ํฌ๊ธฐ์ ์นธ์ผ๋ก ๋๋์ด์ง๋ฉฐ, ํน์ ํ ์์น์๋ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌํ ์ ์๋ค. ๋ชจ๋ ๋ฐ์ด๋ฌ์ค๋ 1๋ฒ๋ถํฐ K๋ฒ๊น์ง์ ๋ฐ์ด๋ฌ์ค ์ข
๋ฅ ์ค ํ๋์ ์ํ๋ค.
์ํ๊ด์ ์กด์ฌํ๋ ๋ชจ๋ ๋ฐ์ด๋ฌ์ค๋ 1์ด๋ง๋ค ์, ํ, ์ข, ์ฐ์ ๋ฐฉํฅ์ผ๋ก ์ฆ์ํด ๋๊ฐ๋ค. ๋จ, ๋งค ์ด๋ง๋ค ๋ฒํธ๊ฐ ๋ฎ์ ์ข
๋ฅ์ ๋ฐ์ด๋ฌ์ค๋ถํฐ ๋จผ์ ์ฆ์ํ๋ค. ๋ํ ์ฆ์ ๊ณผ์ ์์ ํน์ ํ ์นธ์ ์ด๋ฏธ ์ด๋ ํ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌํ๋ค๋ฉด, ๊ทธ ๊ณณ์๋ ๋ค๋ฅธ ๋ฐ์ด๋ฌ์ค๊ฐ ๋ค์ด๊ฐ ์ ์๋ค.
์ํ๊ด์ ํฌ๊ธฐ์ ๋ฐ์ด๋ฌ์ค์ ์์น ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, S์ด๊ฐ ์ง๋ ํ์ (X,Y)์ ์กด์ฌํ๋ ๋ฐ์ด๋ฌ์ค์ ์ข
๋ฅ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ง์ฝ S์ด๊ฐ ์ง๋ ํ์ ํด๋น ์์น์ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด, 0์ ์ถ๋ ฅํ๋ค. ์ด ๋ X์ Y๋ ๊ฐ๊ฐ ํ๊ณผ ์ด์ ์์น๋ฅผ ์๋ฏธํ๋ฉฐ, ์ํ๊ด์ ๊ฐ์ฅ ์ผ์ชฝ ์์ ํด๋นํ๋ ๊ณณ์ (1,1)์ ํด๋นํ๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด 3x3 ํฌ๊ธฐ์ ์ํ๊ด์ด ์๋ค๊ณ ํ์. ์๋ก ๋ค๋ฅธ 1๋ฒ, 2๋ฒ, 3๋ฒ ๋ฐ์ด๋ฌ์ค๊ฐ ๊ฐ๊ฐ (1,1), (1,3), (3,1)์ ์์นํด ์๋ค. ์ด ๋ 2์ด๊ฐ ์ง๋ ๋ค์ (3,2)์ ์กด์ฌํ๋ ๋ฐ์ด๋ฌ์ค์ ์ข
๋ฅ๋ฅผ ๊ณ์ฐํด๋ณด์.
1์ด๊ฐ ์ง๋ ํ์ ์ํ๊ด์ ์ํ๋ ๋ค์๊ณผ ๊ฐ๋ค
2์ด๊ฐ ์ง๋ ํ์ ์ํ๊ด์ ์ํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก 2์ด๊ฐ ์ง๋ ๋ค์ (3,2)์ ์กด์ฌํ๋ ๋ฐ์ด๋ฌ์ค์ ์ข ๋ฅ๋ 3๋ฒ ๋ฐ์ด๋ฌ์ค๋ค. ๋ฐ๋ผ์ 3์ ์ถ๋ ฅํ๋ฉด ์ ๋ต์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ฐ์ N, K๊ฐ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 200, 1 ≤ K ≤ 1,000) ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฑธ์ณ์ ์ํ๊ด์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ์ N๊ฐ์ ์์๋ก ๊ตฌ์ฑ๋๋ฉฐ, ํด๋น ์์น์ ์กด์ฌํ๋ ๋ฐ์ด๋ฌ์ค์ ๋ฒํธ๊ฐ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. ๋จ, ํด๋น ์์น์ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ 0์ด ์ฃผ์ด์ง๋ค. ๋ํ ๋ชจ๋ ๋ฐ์ด๋ฌ์ค์ ๋ฒํธ๋ K์ดํ์ ์์ฐ์๋ก๋ง ์ฃผ์ด์ง๋ค. N+2๋ฒ์งธ ์ค์๋ S, X, Y๊ฐ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. (0 ≤ S ≤ 10,000, 1 ≤ X, Y ≤ N)
์ถ๋ ฅ
S์ด ๋ค์ (X,Y)์ ์กด์ฌํ๋ ๋ฐ์ด๋ฌ์ค์ ์ข ๋ฅ๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ S์ด ๋ค์ ํด๋น ์์น์ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด, 0์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
3 3
1 0 2
0 0 0
3 0 0
2 3 2
์์ ์ถ๋ ฅ 1
3
ํ์ด ์ฝ๋ ๐ก
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, k] = input[0].split(' ').map(Number);
const [targetS, targetX, targetY] = input[n + 1].split(' ').map(Number);
const graph = [];
const data = [];
for (let i = 0; i < n; i++) {
const arr = input[i + 1].split(' ').map(Number);
graph.push(arr);
for (let j = 0; j < n; j++) {
if (graph[i][j] !== 0) {
data.push([graph[i][j], i, j, 0]);
}
}
}
const queue = new Queue();
data.sort((a, b) => a[0] - b[0]);
for (const x of data) {
queue.enqueue(x);
}
const dx = [-1, 1, 0, 0];
const dy = [0, 0, -1, 1];
while (queue.size() !== 0) {
const [value, x, y, s] = queue.dequeue();
if (s === targetS) break;
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 (graph[nx][ny] === 0) {
graph[nx][ny] = value;
queue.enqueue([value, nx, ny, s + 1]);
}
}
}
console.log(graph[targetX - 1][targetY - 1]);
๐ ํ์ด ํด์ค
๋ชจ๋ ๊ฐ์ ์ ๋น์ฉ์ 1(์ด)์ด๊ธฐ๋๋ฌธ์ ๋๋น์ฐ์ ํ์(BFS)์ ์ด์ฉํด ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ ์ ์๋ค.
๋จผ์ ์ ์ถ๋ ฅ์ ๋ฐ์์ graph ๋ฐฐ์ด์ ๋ฃ์ด์ฃผ๊ณ , 0์ด ์๋ ์์๋ data๋ผ๋ ๋ฐฐ์ด์ ๋ฃ์ด์ฃผ์๋ค.
์ด๊ธฐ์ data ๋ฐฐ์ด์ ๋ฐ๋ก ๋ฃ์ด์ฃผ๋ ์ด์ ๋ ์ซ์๊ฐ ๋ฎ์ ์์๋ถํฐ ๋ฒ์๋๊ณ , ๋ฐ์ด๋ฌ์ค๊ฐ ์๋ ์์น๋ฅผ ์ ์ฅํ๊ณ ํ์ ๋ฃ์ด์ฃผ๊ธฐ ์ํจ์ด๋ค.
๊ทธ๋์ data ๋ฐฐ์ด์ ์์๋ค์ ๋ฃ์ด์ฃผ๊ณ ๊ฐ value์ ๋ํด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํด์ฃผ์๋ค.
queue์๋ [๊ฐ, ํ, ์ด, ์ด]๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๊ณ ๋ฐ๋ณต๋ฌธ์ ๋๋ ค์ค์ผ๋ก์จ ์ซ์๊ฐ ๋ฎ์ ๊ฒ๋ถํฐ ์์ฐจ์ ์ผ๋ก ์งํํ๊ฒ ๋๋ค.
์, ํ, ์ข, ์ฐ๋ฅผ ํ์ํ ๋ ๋งต์ ํฌ๊ธฐ๋ฅผ ๋ฒ์ด๋๋์ง ํ์ธ ํ ๋ฒ์ด๋์ง ์๋๋ค๋ฉด ๋ค์ ์ด๋ํ ์ง์ญ์ ํ์ธ ํ ํด๋น ์ง์ญ์ ๋ฐ์ด๋ฌ์ค๊ฐ ์๋ค๋ฉด ํ์ฌ ๋ฐ์ด๋ฌ์ค๋ก ํผํธ๋ ค์ค๋ค.
๋ฐ๋ณต์ ํ๋ค๊ฐ ๊บผ๋ธ ์์์ ์ด์ ์ ๋ต์ ๊ตฌํ ์ด๊ฐ ๊ฐ๋ค๋ฉด ๋ฐ๋ณต๋ฌธ์ ์ค๋จ์ํค๊ณ graph์์ ๊ตฌํด์ผ ํ ์ง์ญ์ ๊ฐ์ ์ถ๋ ฅํ๋ค.