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

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

1. ๋ฌธ์ œ

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์„ ์ถœ๋ ฅํ•˜๋ฉด ์ •๋‹ต์ด๋‹ค.

1.1. ์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ 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)

1.2. ์ถœ๋ ฅ

S์ดˆ ๋’ค์— (X,Y)์— ์กด์žฌํ•˜๋Š” ๋ฐ”์ด๋Ÿฌ์Šค์˜ ์ข…๋ฅ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ S์ดˆ ๋’ค์— ํ•ด๋‹น ์œ„์น˜์— ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

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

3 3
1 0 2
0 0 0
3 0 0
2 3 2

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

3

๋ฐ˜์‘ํ˜•

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, 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]);

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

๋ชจ๋“  ๊ฐ„์„ ์˜ ๋น„์šฉ์€ 1(์ดˆ)์ด๊ธฐ๋•Œ๋ฌธ์— ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰(BFS)์„ ์ด์šฉํ•ด ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๋จผ์ € ์ž…์ถœ๋ ฅ์„ ๋ฐ›์•„์„œ graph ๋ฐฐ์—ด์— ๋„ฃ์–ด์ฃผ๊ณ , 0์ด ์•„๋‹Œ ์š”์†Œ๋Š” data๋ผ๋Š” ๋ฐฐ์—ด์— ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

์ดˆ๊ธฐ์— data ๋ฐฐ์—ด์— ๋”ฐ๋กœ ๋„ฃ์–ด์ฃผ๋Š” ์ด์œ ๋Š” ์ˆซ์ž๊ฐ€ ๋‚ฎ์€ ์ˆœ์„œ๋ถ€ํ„ฐ ๋ฒˆ์‹๋˜๊ณ , ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์žˆ๋Š” ์œ„์น˜๋ฅผ ์ €์žฅํ•˜๊ณ  ํ์— ๋„ฃ์–ด์ฃผ๊ธฐ ์œ„ํ•จ์ด๋‹ค.

๊ทธ๋ž˜์„œ data ๋ฐฐ์—ด์— ์š”์†Œ๋“ค์„ ๋„ฃ์–ด์ฃผ๊ณ  ๊ฐ value์— ๋Œ€ํ•ด์„œ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์ฃผ์—ˆ๋‹ค.

queue์—๋Š” [๊ฐ’, ํ–‰, ์—ด, ์ดˆ]๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๊ณ  ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ ค์คŒ์œผ๋กœ์จ ์ˆซ์ž๊ฐ€ ๋‚ฎ์€ ๊ฒƒ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

 

์ƒ, ํ•˜, ์ขŒ, ์šฐ๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ ๋งต์˜ ํฌ๊ธฐ๋ฅผ ๋ฒ—์–ด๋‚˜๋Š”์ง€ ํ™•์ธ ํ›„ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋‹ค์Œ ์ด๋™ํ•  ์ง€์—ญ์„ ํ™•์ธ ํ›„ ํ•ด๋‹น ์ง€์—ญ์— ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์—†๋‹ค๋ฉด ํ˜„์žฌ ๋ฐ”์ด๋Ÿฌ์Šค๋กœ ํผํŠธ๋ ค์ค€๋‹ค.

 

๋ฐ˜๋ณต์„ ํ•˜๋‹ค๊ฐ€ ๊บผ๋‚ธ ์š”์†Œ์˜ ์ดˆ์™€ ์ •๋‹ต์„ ๊ตฌํ•  ์ดˆ๊ฐ€ ๊ฐ™๋‹ค๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ์ค‘๋‹จ์‹œํ‚ค๊ณ  graph์—์„œ ๊ตฌํ•ด์•ผ ํ•  ์ง€์—ญ์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•
profile

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

@์šฉ๋‡ฝ

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