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

[๋ฐฑ์ค€]1012๋ฒˆ '์œ ๊ธฐ๋† ๋ฐฐ์ถ”' ๋ฌธ์ œ ํ’€์ด - JavaScript

๋ฌธ์ œ

์ฐจ์„ธ๋Œ€ ์˜๋†์ธ ํ•œ๋‚˜๋Š” ๊ฐ•์›๋„ ๊ณ ๋žญ์ง€์—์„œ ์œ ๊ธฐ๋† ๋ฐฐ์ถ”๋ฅผ ์žฌ๋ฐฐํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ๋†์•ฝ์„ ์“ฐ์ง€ ์•Š๊ณ  ๋ฐฐ์ถ”๋ฅผ ์žฌ๋ฐฐํ•˜๋ ค๋ฉด ๋ฐฐ์ถ”๋ฅผ ํ•ด์ถฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•œ๋‚˜๋Š” ํ•ด์ถฉ ๋ฐฉ์ง€์— ํšจ๊ณผ์ ์ธ ๋ฐฐ์ถ”ํฐ์ง€๋ ์ด๋ฅผ ๊ตฌ์ž…ํ•˜๊ธฐ๋กœ ๊ฒฐ์‹ฌํ•œ๋‹ค. ์ด ์ง€๋ ์ด๋Š” ๋ฐฐ์ถ”๊ทผ์ฒ˜์— ์„œ์‹ํ•˜๋ฉฐ ํ•ด์ถฉ์„ ์žก์•„ ๋จน์Œ์œผ๋กœ์จ ๋ฐฐ์ถ”๋ฅผ ๋ณดํ˜ธํ•œ๋‹ค. ํŠนํžˆ, ์–ด๋–ค ๋ฐฐ์ถ”์— ๋ฐฐ์ถ”ํฐ์ง€๋ ์ด๊ฐ€ ํ•œ ๋งˆ๋ฆฌ๋ผ๋„ ์‚ด๊ณ  ์žˆ์œผ๋ฉด ์ด ์ง€๋ ์ด๋Š” ์ธ์ ‘ํ•œ ๋‹ค๋ฅธ ๋ฐฐ์ถ”๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์–ด, ๊ทธ ๋ฐฐ์ถ”๋“ค ์—ญ์‹œ ํ•ด์ถฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ํ•œ ๋ฐฐ์ถ”์˜ ์ƒํ•˜์ขŒ์šฐ ๋„ค ๋ฐฉํ–ฅ์— ๋‹ค๋ฅธ ๋ฐฐ์ถ”๊ฐ€ ์œ„์น˜ํ•œ ๊ฒฝ์šฐ์— ์„œ๋กœ ์ธ์ ‘ํ•ด์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

ํ•œ๋‚˜๊ฐ€ ๋ฐฐ์ถ”๋ฅผ ์žฌ๋ฐฐํ•˜๋Š” ๋•…์€ ๊ณ ๋ฅด์ง€ ๋ชปํ•ด์„œ ๋ฐฐ์ถ”๋ฅผ ๊ตฐ๋ฐ๊ตฐ๋ฐ ์‹ฌ์–ด ๋†“์•˜๋‹ค. ๋ฐฐ์ถ”๋“ค์ด ๋ชจ์—ฌ์žˆ๋Š” ๊ณณ์—๋Š” ๋ฐฐ์ถ”ํฐ์ง€๋ ์ด๊ฐ€ ํ•œ ๋งˆ๋ฆฌ๋งŒ ์žˆ์œผ๋ฉด ๋˜๋ฏ€๋กœ ์„œ๋กœ ์ธ์ ‘ํ•ด์žˆ๋Š” ๋ฐฐ์ถ”๋“ค์ด ๋ช‡ ๊ตฐ๋ฐ์— ํผ์ ธ์žˆ๋Š”์ง€ ์กฐ์‚ฌํ•˜๋ฉด ์ด ๋ช‡ ๋งˆ๋ฆฌ์˜ ์ง€๋ ์ด๊ฐ€ ํ•„์š”ํ•œ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐฐ์ถ”๋ฐญ์ด ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉด ์ตœ์†Œ 5๋งˆ๋ฆฌ์˜ ๋ฐฐ์ถ”ํฐ์ง€๋ ์ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค. 0์€ ๋ฐฐ์ถ”๊ฐ€ ์‹ฌ์–ด์ ธ ์žˆ์ง€ ์•Š์€ ๋•…์ด๊ณ , 1์€ ๋ฐฐ์ถ”๊ฐ€ ์‹ฌ์–ด์ ธ ์žˆ๋Š” ๋•…์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์ž…๋ ฅ

์ž…๋ ฅ์˜ ์ฒซ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ ์ค„๋ถ€ํ„ฐ ๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด ์ฒซ์งธ ์ค„์—๋Š” ๋ฐฐ์ถ”๋ฅผ ์‹ฌ์€ ๋ฐฐ์ถ”๋ฐญ์˜ ๊ฐ€๋กœ๊ธธ์ด M(1 ≤ M ≤ 50)๊ณผ ์„ธ๋กœ๊ธธ์ด N(1 ≤ N ≤ 50), ๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์ถ”๊ฐ€ ์‹ฌ์–ด์ ธ ์žˆ๋Š” ์œ„์น˜์˜ ๊ฐœ์ˆ˜ K(1 ≤ K ≤ 2500)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ K์ค„์—๋Š” ๋ฐฐ์ถ”์˜ ์œ„์น˜ X(0 ≤ X ≤ M-1), Y(0 ≤ Y ≤ N-1)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฐฐ์ถ”์˜ ์œ„์น˜๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด ํ•„์š”ํ•œ ์ตœ์†Œ์˜ ๋ฐฐ์ถ”ํฐ์ง€๋ ์ด ๋งˆ๋ฆฌ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•

์˜ˆ์ œ ์ž…๋ ฅ 1

2
10 8 17
0 0
1 0
1 1
4 2
4 3
4 5
2 4
3 4
7 4
8 4
9 4
7 5
8 5
9 5
7 6
8 6
9 6
10 10 1
5 5

์˜ˆ์ œ ์ถœ๋ ฅ 1

5
1

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

const fs = require('fs');
const file = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
const input = fs.readFileSync(file).toString().trim().split('\n');

const dx = [-1, 1, 0, 0];
const dy = [0, 0, -1, 1];

function dfs(graph, n, m, x, y) {
  // ์ฃผ์–ด์ง„ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ฆ‰์‹œ ์ข…๋ฃŒ
  if (x < 0 || x >= n || y < 0 || y >= m) {
    return false;
  }
  // ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ–ˆ๋‹ค๋ฉด
  if (graph[x][y] !== 1) {
    return false;
  }
  // ํ•ด๋‹น ๋…ธ๋“œ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
  graph[x][y] = -1;
  // ์ƒ, ํ•˜, ์ขŒ, ์šฐ์˜ ์œ„์น˜๋“ค๋„ ๋ชจ๋‘ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœ
  // ์ด ์žฌ๊ท€ํ•จ์ˆ˜๋“ค์€ ๋ฐฉ๋ฌธ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์žฌ๊ท€์ด๋‹ค.
  for (let i = 0; i < 4; i++) {
    const nx = x + dx[i];
    const ny = y + dy[i];
    dfs(graph, n, m, nx, ny);
  }

  return true;
}

let testCases = Number(input[0]);
let line = 1;
let answer = '';
while (testCases--) {
  // ๊ฐ€๋กœ ๊ธธ์ด(M), ์„ธ๋กœ ๊ธธ์ด(N), ๋ฐฐ์ถ”๊ฐ€ ์‹ฌ์–ด์ ธ ์žˆ๋Š” ์œ„์น˜์˜ ๊ฐœ์ˆ˜(K)
  const [m, n, k] = input[line].split(' ').map(Number);
  const graph = Array.from({ length: n }, () => new Array(m)); // ๊ทธ๋ž˜ํ”„ ์ •๋ณด

  for (let i = 1; i <= k; i++) {
    const [y, x] = input[line + i].split(' ').map(Number);
    graph[x][y] = 1;
  }

  let count = 0; // ์—ฐ๊ฒฐ ์š”์†Œ์˜ ์ˆ˜ ๊ณ„์‚ฐ
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < m; j++) {
      if (dfs(graph, n, m, i, j)) {
        count++;
      }
    }
  }

  line += k + 1;
  answer += count + '\n';
}

console.log(answer);

๐Ÿ‘‰ ํ’€์ด ํ•ด์„ค

DFS๋กœ ํ’€์ด๋ฅผํ–ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๊ฒฐ๊ตญ ์—ฐ๊ฒฐ์š”์†Œ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋‹ค.

[์ƒ, ํ•˜, ์ขŒ, ์šฐ]์˜ ์œ„์น˜๋กœ ๊ฐ„์„ ์ด ์—ฐ๊ฒฐ ๋˜์–ด์žˆ๋Š” ๊ทธ๋ž˜ํ”„๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ž…์ถœ๋ ฅ์„ ๋ฐ›์€ ํ›„,

์ž…์ถœ๋ ฅ์— ๋Œ€ํ•ด์„œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ดˆ๊ธฐํ™” ์‹œ์ผœ์ฃผ๊ณ  ๋ฐฐ์ถ”๊ฐ€ ์žˆ๋Š” ์œ„์น˜๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

๊ทธ๋ž˜ํ”„์˜ ์™ผ์ชฝ ์ƒ๋‹จ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์•„์ง ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋Š” ๋…ธ๋“œ์— ๋Œ€ํ•ด DFS์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

DFSํ•จ์ˆ˜ ๋‚ด์—์„œ๋Š” 

  1.  ๋ฒ”์œ„๊ฐ€ ๋ฒ—์–ด๋‚˜๋ฉด return false
  2. ๊ทธ๋ž˜ํ”„์˜ ํ•ด๋‹น ์ธ๋ฑ์Šค ๊ฐ’์ด 1์ด ์•„๋‹ˆ๋ผ๋ฉด. ์ฆ‰, ๋ฐฉ๋ฌธํ•˜๋ ค๋Š” ๋…ธ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉด return false

์ด ๋‘๊ฐ€์ง€์˜ ์กฐ๊ฑด์„ ํ†ต๊ณผํ•˜๋ฉด

๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค.

๋จผ์ € ํ˜„์žฌ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ๋ฐฉ๋ฌธ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋‹ค์‹œ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœํ•ด์„œ ํ˜„์žฌ ์œ„์น˜์—์„œ ์ƒ, ํ•˜, ์ขŒ, ์šฐ์— ๋Œ€ํ•œ ์œ„์น˜๋ฅผ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•œ๋‹ค.

DFSํ•จ์ˆ˜ ๋‚ด์—์„œ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” ๋ถ€๋ถ„์€ ์ฒ˜์Œ ๋“ค์–ด์˜จ ์œ„์น˜๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ƒ, ํ•˜, ์ขŒ, ์šฐ์— ๋Œ€ํ•œ ์œ„์น˜๋ฅผ ๋ฐฉ๋ฌธํ•ด์„œ ์ฒ˜๋ฆฌ๋งŒ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค.

๋ฐ˜์‘ํ˜•
profile

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

@์šฉ๋‡ฝ

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