๐Ÿ’ป์šฉ๋‡ฝ ๊ฐœ๋ฐœ ๋…ธํŠธ๐Ÿ’ป
article thumbnail
๋ฐ˜์‘ํ˜•

[๋ฐฑ์ค€]2638๋ฒˆ '์น˜์ฆˆ' ๋ฌธ์ œ ํ’€์ด - JavaScript

๋‚œ์ด๋„: ๊ณจ๋“œ 3

ํ’€์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜: BFS

๋ฌธ์ œ

N×M์˜ ๋ชจ๋ˆˆ์ข…์ด ์œ„์— ์•„์ฃผ ์–‡์€ ์น˜์ฆˆ๊ฐ€ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋˜์–ด ์žˆ๋‹ค. ๋‹จ, N ์€ ์„ธ๋กœ ๊ฒฉ์ž์˜ ์ˆ˜์ด๊ณ , M ์€ ๊ฐ€๋กœ ๊ฒฉ์ž์˜ ์ˆ˜์ด๋‹ค. ์ด ์น˜์ฆˆ๋Š” ๋ƒ‰๋™ ๋ณด๊ด€์„ ํ•ด์•ผ๋งŒ ํ•˜๋Š”๋ฐ ์‹ค๋‚ด์˜จ๋„์— ๋‚ด์–ด๋†“์œผ๋ฉด ๊ณต๊ธฐ์™€ ์ ‘์ด‰ํ•˜์—ฌ ์ฒœ์ฒœํžˆ ๋…น๋Š”๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋Ÿฌํ•œ ๋ชจ๋ˆˆ์ข…์ด ๋ชจ์–‘์˜ ์น˜์ฆˆ์—์„œ ๊ฐ ์น˜์ฆˆ ๊ฒฉ์ž(์ž‘ ์€ ์ •์‚ฌ๊ฐํ˜• ๋ชจ์–‘)์˜ 4๋ณ€ ์ค‘์—์„œ ์ ์–ด๋„ 2๋ณ€ ์ด์ƒ์ด ์‹ค๋‚ด์˜จ๋„์˜ ๊ณต๊ธฐ์™€ ์ ‘์ด‰ํ•œ ๊ฒƒ์€ ์ •ํ™•ํžˆ ํ•œ์‹œ๊ฐ„๋งŒ์— ๋…น์•„ ์—†์–ด์ ธ ๋ฒ„๋ฆฐ๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋ž˜ <๊ทธ๋ฆผ 1> ๋ชจ์–‘๊ณผ ๊ฐ™์€ ์น˜์ฆˆ(ํšŒ์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋œ ๋ถ€๋ถ„)๋ผ๋ฉด C๋กœ ํ‘œ์‹œ๋œ ๋ชจ๋“  ์น˜์ฆˆ ๊ฒฉ์ž๋Š” ํ•œ ์‹œ๊ฐ„ ํ›„์— ์‚ฌ๋ผ์ง„๋‹ค.

๊ทธ๋ฆผ 1

<๊ทธ๋ฆผ 2>์™€ ๊ฐ™์ด ์น˜์ฆˆ ๋‚ด๋ถ€์— ์žˆ๋Š” ๊ณต๊ฐ„์€ ์น˜์ฆˆ ์™ธ๋ถ€ ๊ณต๊ธฐ์™€ ์ ‘์ด‰ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ€์ •ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€ ๋กœ ์ด ๊ณต๊ฐ„์— ์ ‘์ด‰ํ•œ ์น˜์ฆˆ ๊ฒฉ์ž๋Š” ๋…น์ง€ ์•Š๊ณ  C๋กœ ํ‘œ์‹œ๋œ ์น˜์ฆˆ ๊ฒฉ์ž๋งŒ ์‚ฌ๋ผ์ง„๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•œ ์‹œ๊ฐ„ ํ›„, ์ด ๊ณต๊ฐ„์œผ๋กœ ์™ธ๋ถ€๊ณต๊ธฐ๊ฐ€ ์œ ์ž…๋˜๋ฉด <๊ทธ๋ฆผ 3>์—์„œ์™€ ๊ฐ™์ด C๋กœ ํ‘œ์‹œ๋œ ์น˜์ฆˆ ๊ฒฉ์ž๋“ค์ด ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ฆผ 2
๊ทธ๋ฆผ 3

๋ชจ๋ˆˆ์ข…์ด์˜ ๋งจ ๊ฐ€์žฅ์ž๋ฆฌ์—๋Š” ์น˜์ฆˆ๊ฐ€ ๋†“์ด์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ€์ •ํ•œ๋‹ค. ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์น˜์ฆˆ๊ฐ€ ๋ชจ๋‘ ๋…น์•„ ์—†์–ด์ง€๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์ •ํ™•ํ•œ ์‹œ๊ฐ„์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ๋ชจ๋ˆˆ์ข…์ด์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ๊ฐœ์˜ ์ •์ˆ˜ N, M (5 ≤ N, M ≤ 100)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ๋ชจ๋ˆˆ์ข…์ด ์œ„์˜ ๊ฒฉ์ž์— ์น˜์ฆˆ๊ฐ€ ์žˆ๋Š” ๋ถ€๋ถ„์€ 1๋กœ ํ‘œ์‹œ๋˜๊ณ , ์น˜์ฆˆ๊ฐ€ ์—†๋Š” ๋ถ€๋ถ„์€ 0์œผ๋กœ ํ‘œ์‹œ๋œ๋‹ค. ๋˜ํ•œ, ๊ฐ 0๊ณผ 1์€ ํ•˜๋‚˜์˜ ๊ณต๋ฐฑ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค.

 

์ถœ๋ ฅ

์ถœ๋ ฅ์œผ๋กœ๋Š” ์ฃผ์–ด์ง„ ์น˜์ฆˆ๊ฐ€ ๋ชจ๋‘ ๋…น์•„ ์—†์–ด์ง€๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์ •ํ™•ํ•œ ์‹œ๊ฐ„์„ ์ •์ˆ˜๋กœ ์ฒซ ์ค„์— ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ 1 

8 9
0 0 0 0 0 0 0 0 0
0 0 0 1 1 0 0 0 0
0 0 0 1 1 0 1 1 0
0 0 1 1 1 1 1 1 0
0 0 1 1 1 1 1 0 0
0 0 1 1 0 1 1 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0

์˜ˆ์ œ ์ถœ๋ ฅ 1 

4

๋ฐ˜์‘ํ˜•

๐Ÿ‘‰ ํ’€์ด ์ฝ”๋“œ

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, m] = input[0].split(' ').map(Number);
const graph = input.slice(1).map((item) => item.split(' ').map(Number));
const dx = [-1, 1, 0, 0];
const dy = [0, 0, -1, 1];

const removeCheese = () => {
  let changed = false;
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < m; j++) {
      if (graph[i][j] >= 3) {
        graph[i][j] = 0;
        changed = true;
      }
      if (graph[i][j] === 2) {
        graph[i][j] = 1;
      }
    }
  }
  return changed;
};

let count = 0;
while (true) {
  const visited = Array.from({ length: n }, () => Array(m).fill(false));
  const queue = new Queue();
  queue.enqueue([0, 0]);
  visited[0][0] = true;

  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 >= m) continue;
      if (visited[nx][ny]) continue;

      if (graph[nx][ny] >= 1) {
        graph[nx][ny]++;
      } else {
        queue.enqueue([nx, ny]);
        visited[nx][ny] = true;
      }
    }
  }

  if (removeCheese()) {
    count++;
  } else {
    console.log(count);
    return;
  }
}

๐Ÿ’กํ’€์ด ํ•ด์„ค

๋ฌธ์ œ ํ•ด๊ฒฐ์˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” ์น˜์ฆˆ๊ฐ€ ๋…น์•„ ์—†์–ด์งˆ ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ BFS๋ฅผ ๋ฐ˜๋ณต ์ˆ˜ํ–‰ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์น˜์ฆˆ๊ฐ€ ๋…น์•„ ์—†์–ด์ง€๊ธฐ ์œ„ํ•ด์„œ๋Š” ์™ธ๋ถ€ ๊ณต๊ธฐ์— ๋‘ ๋ฒˆ ์ด์ƒ ๋‹ฟ์•„์•ผ ํ•œ๋‹ค.

 

์™ผ์ชฝ ์ƒ๋‹จ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์น˜์ฆˆ๊ฐ€ ์•„๋‹Œ ๋ถ€๋ถ„ ์ฆ‰, 0์ผ ๋•Œ๋งŒ ์ƒ, ํ•˜, ์ขŒ, ์šฐ๋กœ ํผ์ ธ ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

 

๋‹ค์Œ ์ด๋™ํ•  ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ๋งต์˜ ํฌ๊ธฐ๋ฅผ ๋ฒ—์–ด๋‚˜๊ณ  ๋ฐฉ๋ฌธํ–ˆ๋˜ ๊ณณ์ด๋ฉด ๊ฑด๋„ˆ๋„์–ด์ค€๋‹ค.

์œ„ ์กฐ๊ฑด์„ ํ†ต๊ณผํ•˜๋ฉด ํผ์ ธ๋‚˜๊ฐ€๋Š” ๋„์ค‘์— 1 ์ด์ƒ ์ฆ‰, ์น˜์ฆˆ๋ฅผ ๋งŒ๋‚˜๋ฉด ํ•œ ๋ฉด์ด ๋‹ฟ์•˜๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ํ•ด๋‹น ์น˜์ฆˆ๋ฅผ +1 ์นด์šดํŠธํ•ด์ค€๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์™ธ๋ถ€ ๊ณต๊ธฐ์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ์™€ ํ์— ์œ„์น˜ ์š”์†Œ๋ฅผ ๋„ฃ์–ด์ฃผ๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค.

๋‹ค์Œ ์ด๋™ ์ง€์—ญ์ด ์น˜์ฆˆ๋ฉด ์นด์šดํŠธ๋งŒ ํ•ด์ฃผ๊ณ  ๋„˜์–ด๊ฐ„๋‹ค.

 

๊ทธ ์ด์œ ๋Š” ๋ฐ”๊นฅ์ชฝ๋ถ€ํ„ฐ ์น˜์ฆˆ๋ฅผ ๋…น์—ฌ์•ผ ํ•˜๊ณ , ๋‚ด๋ถ€์— ๊ณต๊ธฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ๋‚ด๋ถ€ ๊ณต๊ธฐ๋กœ ์ธํ•ด์„œ๋Š” ๋…น์ง€ ์•Š๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ์น˜์ฆˆ๊ฐ€ ์™ธ๋ถ€ ๊ณต๊ธฐ์™€ ์—ฌ๋Ÿฌ ๋ฒˆ ๋‹ฟ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋Š” ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•œ ์‚ฌ์ดํด์ด ๋๋‚˜๋ฉด ์น˜์ฆˆ๋ฅผ ๋…น์ด๋Š” ์ž‘์—…์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

์น˜์ฆˆ๋ฅผ ๋…น์ด๋Š” ์ž‘์—…์€ removeCheese ํ•จ์ˆ˜์—์„œ graph์— ๋Œ€ํ•ด ํƒ์ƒ‰ํ•˜๋ฉด์„œ ์น˜์ฆˆ๋ฅผ ๋…น์—ฌ์ค€๋‹ค.

์น˜์ฆˆ๋Š” 1๋กœ ์ดˆ๊ธฐํ™”๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์š”์†Œ๊ฐ€ 3 ์ด์ƒ์ด๋ฉด ์น˜์ฆˆ๊ฐ€ ์™ธ๋ถ€ ๊ณต๊ธฐ์™€ ๋‘ ๋ฒˆ ์ด์ƒ ๋‹ฟ์•˜๋‹ค๋Š” ๋œป์ด๋‹ค.

ํ•˜์ง€๋งŒ 2๋ผ๋ฉด ํ•œ ๋ฉด๋งŒ ๋‹ฟ์•˜๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ๋‹ค์‹œ BFS๋ฅผ ์ œ๋Œ€๋กœ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด 1๋กœ ๋˜๋Œ๋ ค์ค€๋‹ค.

 

removeCheese ํ•จ์ˆ˜์—์„œ ์น˜์ฆˆ๋ฅผ ๋…น์ด๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด count + 1์„ ํ•ด์ฃผ๊ณ  ๋‹ค์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ BFS๋ฅผ ์ˆ˜ํ–‰ํ•ด ์ฃผ๊ณ ,

์น˜์ฆˆ๋ฅผ ๋…น์ด๋Š” ์ƒํ™ฉ์ด ์ผ์–ด๋‚˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋” ์ด์ƒ ๋…น์ผ ์น˜์ฆˆ๊ฐ€ ์—†๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ count๋ฅผ ์ถœ๋ ฅํ•ด ์ฃผ๊ณ  ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•
profile

๐Ÿ’ป์šฉ๋‡ฝ ๊ฐœ๋ฐœ ๋…ธํŠธ๐Ÿ’ป

@์šฉ๋‡ฝ

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!