๋์ด๋: ๊ณจ๋ 2
ํ์ด ์๊ณ ๋ฆฌ์ฆ: BFS
๋ฌธ์
์์ฃผ ๋จผ ๋ฏธ๋์ ์ฌ๋๋ค์ด ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๋์ค๊ตํต์ ํ์ดํผํ๋ธ์ด๋ค. ํ์ดํผํ๋ธ ํ๋๋ ์ญ K๊ฐ๋ฅผ ์๋ก ์ฐ๊ฒฐํ๋ค. 1๋ฒ์ญ์์ N๋ฒ์ญ์ผ๋ก ๊ฐ๋๋ฐ ๋ฐฉ๋ฌธํ๋ ์ต์ ์ญ์ ์๋ ๋ช ๊ฐ์ผ๊น?
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ญ์ ์ N๊ณผ ํ ํ์ดํผํ๋ธ๊ฐ ์๋ก ์ฐ๊ฒฐํ๋ ์ญ์ ๊ฐ์ K, ํ์ดํผํ๋ธ์ ๊ฐ์ M์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 100,000, 1 ≤ K, M ≤ 1000)
๋ค์ M๊ฐ ์ค์๋ ํ์ดํผํ๋ธ์ ์ ๋ณด๊ฐ ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค. ์ด K๊ฐ ์ซ์๊ฐ ์ฃผ์ด์ง๋ฉฐ, ์ด ์ซ์๋ ๊ทธ ํ์ดํผํ๋ธ๊ฐ ์๋ก ์ฐ๊ฒฐํ๋ ์ญ์ ๋ฒํธ์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ 1๋ฒ์ญ์์ N๋ฒ์ญ์ผ๋ก ๊ฐ๋๋ฐ ๋ฐฉ๋ฌธํ๋ ์ญ์ ๊ฐ์์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค. ๋ง์ฝ, ๊ฐ ์ ์๋ค๋ฉด -1์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
9 3 5
1 2 3
1 4 5
3 6 7
5 6 7
6 8 9
1-3-6-9๋ 1-5-6-9๋ก ์ด๋ํ๋ฉด ๋๋ค.
์์ ์ถ๋ ฅ 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, k, m] = input[0].split(' ').map(Number);
const graph = Array.from({ length: n + m + 1 }, () => []);
for (let i = 1; i <= m; i++) {
const arr = input[i].split(' ').map(Number);
for (const x of arr) {
graph[x].push(n + i);
graph[n + i].push(x);
}
}
const visited = new Set([1]);
const queue = new Queue();
queue.enqueue([1, 1]);
while (queue.size() !== 0) {
const [dist, now] = queue.dequeue();
if (now === n) {
console.log(Math.floor(dist / 2) + 1);
return;
}
for (const y of graph[now]) {
if (!visited.has(y)) {
visited.add(y);
queue.enqueue([dist + 1, y]);
}
}
}
console.log(-1);
๐กํ์ด ํด์ค
์ผ์ข ์ ์ต๋จ ๊ฑฐ๋ฆฌ ๋ฌธ์ ์ด๋ฉฐ, ๊ฐ์ ์ ๋น์ฉ์ด ๋์ผํ๊ธฐ ๋๋ฌธ์ BFS๋ก ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ ์ ์๋ค.
๋ฌธ์ ํด๊ฒฐ์ ํต์ฌ ํ์ ํ์ดํผํ๋ธ๋ฅผ ํฌํจํ์ฌ ์ ์ฒด ๋ ธ๋๋ฅผ ๊ทธ๋ํ๋ก ๊ตฌ์ฑํด์ผ ํ๋ค.
์์ 1๋ฒ์ ์์๋ก ๋ค๋ฉด,
1 -> H -> 3 -> H -> 6 -> H -> 9
์ ๊ณผ์ ์ ํตํด 1๋ฒ ์ญ๋ถํฐ N๋ฒ ์ญ๊น์ง ๋์ฐฉํ ์ ์๊ฒ ๋๋ค.
ํ์ดํผํ๋ธ๋ ์ค๊ฐ ๋ค๋ฆฌ ์ญํ ์ ํด์ค๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๋ง์ง๋ง์ ๊ณ์ฐํ ๋๋ ์ญ ์ด๋ ๊ฑฐ๋ฆฌ๋ง ๊ณ์ฐํ๋ฉด ๋๊ธฐ๋๋ฌธ์ ํ์ดํผ ํ๋ธ ์ด๋์ด ํฌํจ๋ ๋น์ฉ์ ๋นผ๊ณ 1๋ฒ ์ญ๋ ๋น์ฉ์ ํฌํจ์ํค๊ธฐ ์ํด์ ์ด๋๊ฑฐ๋ฆฌ / 2 + 1์ ํด์ค๋ค.
graph์ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ ๋, ๊ฐ ์ญ์ด ์กด์ฌํ๋ ํ์ดํผ ํ๋ธ์ ํ์ดํผํ๋ธ๊ฐ ๊ฐ๊ณ ์๋ ์ญ์ ๋ฒํธ๋ฅผ graph์ ๋ฃ์ด์ค๋ค.
1๋ฒ ์์ ๋ฅผ ์์๋ก ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์์ฑ๋๋ค.
[
[], [ 10, 11 ],
[ 10 ], [ 10, 12 ],
[ 11 ], [ 11, 13 ],
[ 12, 13, 14 ], [ 12, 13 ],
[ 14 ], [ 14 ],
[ 1, 2, 3 ], [ 1, 4, 5 ],
[ 3, 6, 7 ], [ 5, 6, 7 ],
[ 6, 8, 9 ]
]
์ด๋ฐฐ์ด์ ๊ธธ์ด๋ n(์ญ์ ๊ฐ์) + m(ํ์ดํผ ํ๋ธ์ ๊ฐ์) + 1 ์ด ๋๋ค.
๊ณ์ฐํ๊ธฐ ์ฝ๊ฒ 0๋ฒ ์ธ๋ฑ์ค๋ ์ฌ์ฉํ์ง ์๊ณ 1๋ฒ ์ญ๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์ 1๋ฒ ์ธ๋ฑ์ค๋ถํฐ ์์ํ๋ค.
1๋ฒ ~ N๋ฒ๊น์ง๋ ์ญ์ด ์ด๋ค ํ์ดํผ ํ๋ธ์ ํฌํจ๋์ด ์๋์ง.
N + 1๋ฒ ๋ถํฐ M๋ฒ ๊น์ง๋ ๋ช ๋ฒ์งธ ํ์ดํผ ํ๋ธ๊ฐ ์ด๋ค ์ญ๋ค์ ํฌํจํ๊ณ ์๋์ง ์ ๋ณด๋ฅผ ๊ฐ๊ณ ์๋ค.
1๋ฒ ์ธ๋ฑ์ค๋ถํฐ ์๋ฅผ ๋ค์๋ฉด 1๋ฒ ์ธ๋ฑ์ค(์ญ)๋ 10๋ฒ ์ธ๋ฑ์ค(ํ์ดํผํ๋ธ)์ 11๋ฒ ํ์ดํผํ๋ธ์ ์กด์ฌํ๋ค๋ ๋ป์ด๊ณ 10๋ฒ ์ธ๋ฑ์ค(ํ์ดํผํ๋ธ)๋ 1,2,3๋ฒ ์ญ์ ํฌํจํ๊ณ ์๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ํ์๋ [๊ฑฐ๋ฆฌ, ๋ ธ๋]๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๊ณ 1๋ฒ ๋ ธ๋๋ถํฐ ์์ฐจ์ ์ผ๋ก ๋๋น์ฐ์ ํ์์ ์งํํ๋ค.
๋ฐฉ๋ฌธ์ ํ๋ฉด์ ํด๋น ๋ ธ๋์ ๋ชจ๋ ์์๋ค์ ํ์ ๋ฃ์ด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ฉด์ ๋ฐฉ๋ฌธํ์ง ์๋ ๋ ธ๋์ ๋ํด์๋ง ๋ฐฉ๋ฌธ์ ์งํํด์ผ ํ๋ค.
์งํํ๋ค๊ฐ ํ์ฌ ๋ ธ๋๊ฐ n๋ฒ์ด ๋๋ค๋ฉด ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
ํ๊ฐ ๋น ๋๊น์ง N๋ฒ์ ๋๋ฌํ์ง ๋ชปํ๋ค๋ฉด -1์ ์ถ๋ ฅํ๋ค.