์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ/๋ฐฑ์ค€

[๋ฐฑ์ค€]18405๋ฒˆ '๊ฒฝ์Ÿ์  ์ „์—ผ' ๋ฌธ์ œ ํ’€์ด - JavaScript

์šฉ๋‡ฝ 2023. 8. 8. 18:48
๋ฐ˜์‘ํ˜•

[๋ฐฑ์ค€]18405๋ฒˆ '๊ฒฝ์Ÿ์  ์ „์—ผ' ๋ฌธ์ œ ํ’€์ด - JavaScript

๋ฌธ์ œ

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

1์ดˆ๊ฐ€ ์ง€๋‚œ ํ›„์— ์‹œํ—˜๊ด€์˜ ์ƒํƒœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค

์˜ˆ์ œ 2

2์ดˆ๊ฐ€ ์ง€๋‚œ ํ›„์— ์‹œํ—˜๊ด€์˜ ์ƒํƒœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์˜ˆ์ œ 3

๊ฒฐ๊ณผ์ ์œผ๋กœ 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์—์„œ ๊ตฌํ•ด์•ผ ํ•  ์ง€์—ญ์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•