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

[๋ฐฑ์ค€]16234๋ฒˆ '์ธ๊ตฌ ์ด๋™' ๋ฌธ์ œ ํ’€์ด - JavaScript

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

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

1. ๋ฌธ์ œ

Nร—Nํฌ๊ธฐ์˜ ๋•…์ด ์žˆ๊ณ , ๋•…์€ 1ร—1๊ฐœ์˜ ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ๋•…์—๋Š” ๋‚˜๋ผ๊ฐ€ ํ•˜๋‚˜์”ฉ ์กด์žฌํ•˜๋ฉฐ, rํ–‰ c์—ด์— ์žˆ๋Š” ๋‚˜๋ผ์—๋Š” A[r][c]๋ช…์ด ์‚ด๊ณ  ์žˆ๋‹ค. ์ธ์ ‘ํ•œ ๋‚˜๋ผ ์‚ฌ์ด์—๋Š” ๊ตญ๊ฒฝ์„ ์ด ์กด์žฌํ•œ๋‹ค. ๋ชจ๋“  ๋‚˜๋ผ๋Š” 1ร—1 ํฌ๊ธฐ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ชจ๋“  ๊ตญ๊ฒฝ์„ ์€ ์ •์‚ฌ๊ฐํ˜• ํ˜•ํƒœ์ด๋‹ค.

์˜ค๋Š˜๋ถ€ํ„ฐ ์ธ๊ตฌ ์ด๋™์ด ์‹œ์ž‘๋˜๋Š” ๋‚ ์ด๋‹ค.

์ธ๊ตฌ ์ด๋™์€ ํ•˜๋ฃจ ๋™์•ˆ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰๋˜๊ณ , ๋” ์ด์ƒ ์•„๋ž˜ ๋ฐฉ๋ฒ•์— ์˜ํ•ด ์ธ๊ตฌ ์ด๋™์ด ์—†์„ ๋•Œ๊นŒ์ง€ ์ง€์†๋œ๋‹ค.

 

  • ๊ตญ๊ฒฝ์„ ์„ ๊ณต์œ ํ•˜๋Š” ๋‘ ๋‚˜๋ผ์˜ ์ธ๊ตฌ ์ฐจ์ด๊ฐ€ L๋ช… ์ด์ƒ, R๋ช… ์ดํ•˜๋ผ๋ฉด, ๋‘ ๋‚˜๋ผ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๊ตญ๊ฒฝ์„ ์„ ์˜ค๋Š˜ ํ•˜๋ฃจ ๋™์•ˆ ์—ฐ๋‹ค.
  • ์œ„์˜ ์กฐ๊ฑด์— ์˜ํ•ด ์—ด์–ด์•ผํ•˜๋Š” ๊ตญ๊ฒฝ์„ ์ด ๋ชจ๋‘ ์—ด๋ ธ๋‹ค๋ฉด, ์ธ๊ตฌ ์ด๋™์„ ์‹œ์ž‘ํ•œ๋‹ค.
  • ๊ตญ๊ฒฝ์„ ์ด ์—ด๋ ค์žˆ์–ด ์ธ์ ‘ํ•œ ์นธ๋งŒ์„ ์ด์šฉํ•ด ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด, ๊ทธ ๋‚˜๋ผ๋ฅผ ์˜ค๋Š˜ ํ•˜๋ฃจ ๋™์•ˆ์€ ์—ฐํ•ฉ์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ์—ฐํ•ฉ์„ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ๊ฐ ์นธ์˜ ์ธ๊ตฌ์ˆ˜๋Š” (์—ฐํ•ฉ์˜ ์ธ๊ตฌ์ˆ˜) / (์—ฐํ•ฉ์„ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ์นธ์˜ ๊ฐœ์ˆ˜)๊ฐ€ ๋œ๋‹ค. ํŽธ์˜์ƒ ์†Œ์ˆ˜์ ์€ ๋ฒ„๋ฆฐ๋‹ค.
  • ์—ฐํ•ฉ์„ ํ•ด์ฒดํ•˜๊ณ , ๋ชจ๋“  ๊ตญ๊ฒฝ์„ ์„ ๋‹ซ๋Š”๋‹ค.

๊ฐ ๋‚˜๋ผ์˜ ์ธ๊ตฌ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ธ๊ตฌ ์ด๋™์ด ๋ฉฐ์น  ๋™์•ˆ ๋ฐœ์ƒํ•˜๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

1.1. ์ž…๋ ฅ

์ฒซ์งธ ์ค„์— 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. ์ถœ๋ ฅ

์ธ๊ตฌ ์ด๋™์ด ๋ฉฐ์น  ๋™์•ˆ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์ฒซ์งธ ์ค„์— ์ถœ๋ ฅํ•œ๋‹ค.

1.3. ์˜ˆ์ œ ์ž…๋ ฅ 1 

2 20 50
50 30
20 40

1.4. ์˜ˆ์ œ ์ถœ๋ ฅ 1 

1

์˜ˆ์ œ 1

๋ฐ˜์‘ํ˜•

2. ํ’€์ด ์ฝ”๋“œ ๐Ÿ’ก

<javascript />
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);

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

๋” ์ด์ƒ ์ด๋™์ด ํ•„์š” ์—†์„ ๋•Œ๊นŒ์ง€ BFS ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

๊ทธ๋ž˜์„œ BFS ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  count๋ฅผ ํ•ด์ฃผ๋ฉด์„œ ๋งต์˜ ์ „์ฒด ํฌ๊ธฐ๋งŒํผ ๋ฐ˜๋ณต์„ ํ•ด์ค€๋‹ค.

 

BFS ํ•จ์ˆ˜์—์„œ๋Š” ์š”์†Œ์— ๋Œ€ํ•œ ์ƒ, ํ•˜, ์ขŒ, ์šฐ๋กœ ํƒ์ƒ‰์„ ํ•œ๋‹ค.

 

ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„์™€ ํ˜„์žฌ ์š”์†Œ์™€ ๋‹ค์Œ ์š”์†Œ์˜ ๊ฐ’์˜ ์ฐจ์ด๊ฐ€ l ์ด์ƒ r ์ดํ•˜๋ฉด ๊ณ„์‚ฐ์— ๋“ค์–ด๊ฐ„๋‹ค.

ํ•œ๋ฒˆ ๋ฐฉ๋ฌธ ํ–ˆ๋˜ ๊ณณ์€ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•ด์„œ ๊ณ„์‚ฐ๋˜์ง€ ์•Š๋„๋ก ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๊ณ ,

ํ์— ๋„ฃ์–ด์ฃผ๋ฉด์„œ sum์— ์ด๋™์ด ํ•„์š”ํ•œ ์ง€์—ญ์˜ ์ธ๊ตฌ์ˆ˜๋ฅผ ๋”ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๋™์ด ํ•„์š”ํ•œ ์ง€์—ญ์˜ ์ธ๊ตฌ  ์ˆ˜์˜ ์ขŒํ‘œ๋ฅผ united ๋ฐฐ์—ด์— ๋„ฃ์–ด์ฃผ๋„๋ก ํ•œ๋‹ค.

 

ํ๊ฐ€ ๋นŒ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต์ด ๋๋‚˜๋ฉด united ๋ฐฐ์—ด์˜ ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ maps์— ํ•ด๋‹น ์ขŒํ‘œ์˜ ๊ฐ’์„ ํ‰๊ท ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•ด ์ค€๋‹ค.

 

๋ฐ˜์‘ํ˜•
profile

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

@์šฉ๋‡ฝ

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