๐ ๋ฌธ์
๊ฐ๊ฐ ๋ถํผ๊ฐ A, B, C(1≤A, B, C≤200) ๋ฆฌํฐ์ธ ์ธ ๊ฐ์ ๋ฌผํต์ด ์๋ค. ์ฒ์์๋ ์์ ๋ ๋ฌผํต์ ๋น์ด ์๊ณ , ์ธ ๋ฒ์งธ ๋ฌผํต์ ๊ฐ๋(C ๋ฆฌํฐ) ์ฐจ ์๋ค. ์ด์ ์ด๋ค ๋ฌผํต์ ๋ค์ด์๋ ๋ฌผ์ ๋ค๋ฅธ ๋ฌผํต์ผ๋ก ์์ ๋ถ์ ์ ์๋๋ฐ, ์ด๋์๋ ํ ๋ฌผํต์ด ๋น๊ฑฐ๋, ๋ค๋ฅธ ํ ๋ฌผํต์ด ๊ฐ๋ ์ฐฐ ๋๊น์ง ๋ฌผ์ ๋ถ์ ์ ์๋ค. ์ด ๊ณผ์ ์์ ์์ค๋๋ ๋ฌผ์ ์๋ค๊ณ ๊ฐ์ ํ๋ค.
์ด์ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น๋ค๋ณด๋ฉด ์ธ ๋ฒ์งธ ๋ฌผํต(์ฉ๋์ด C์ธ)์ ๋ด๊ฒจ์๋ ๋ฌผ์ ์์ด ๋ณํ ์๋ ์๋ค. ์ฒซ ๋ฒ์งธ ๋ฌผํต(์ฉ๋์ด A์ธ)์ด ๋น์ด ์์ ๋, ์ธ ๋ฒ์งธ ๋ฌผํต(์ฉ๋์ด C์ธ)์ ๋ด๊ฒจ์์ ์ ์๋ ๋ฌผ์ ์์ ๋ชจ๋ ๊ตฌํด๋ด๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ธ ์ ์ A, B, C๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ์ฌ ๋ต์ ์ถ๋ ฅํ๋ค. ๊ฐ ์ฉ๋์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
์ ์ถ๋ ฅ ์
| ์์ ์ ๋ ฅ | ์์ ์ถ๋ ฅ |
| 8 9 10 | 1 2 8 9 10 |
โ๏ธ ํ์ด
์ด ๋ฌธ์ ๋ DFS๋ฅผ ์ด์ฉํด์ ํ์๋ค. ์๊ฐํ๊ธฐ๊ฐ ์กฐ๊ธ ์ด๋ ค์ ๋๋ฐ ๋ฌผ์ด ์ฐจ์๋ ๊ฐ ์ํฉ์ ํ๋์ ๊ฒฝ์ฐ๋ก ๋ณด๊ณ ํ์์ ์งํํ๋ ๋ฐฉํฅ์ผ๋ก ์๊ฐํ๋ค.
๋ต์ ์ ์ฅํ๋ answer๋ ์ค๋ณต์ด ๋๋ ๋ต์ด ์์ ์ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ Set์ ์ด์ฉํ๋ค. ๋ํ check๋ Set์ ์ด์ฉํด์ ์ด์ ์ ํ์ํ๋ ๋ฌผ์ด ์ฐจ์๋ ์ํฉ์ ์ ์ฅํ๋ฉฐ ์ค๋ณต์ ํํผํ๋ค.
์ธ ๋ฒ์งธ ๋ฌผํต์ ๋ฌผ์ด ๊ฐ๋ ์ฐจ์๋ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ์ํฉ๋ถํฐ ์์ํ๋ค. ์ฒซ ๋ฒ์งธ ์ํฉ๋ ์ฒซ ๋ฒ์งธ ๋ฌผํต์ด ๋น์ด์๋ ์ํฉ์ด๊ธฐ ๋๋ฌธ์ ํ์ํ๊ธฐ ์ ์ answer์ check์ ์ถ๊ฐํด์คฌ๋ค. while๋ฌธ ๋ด๋ถ์๋ for๋ฌธ์ด ์ด์ค์ผ๋ก ์กด์ฌํ๋๋ฐ ์ธ๋ถ์ for๋ฌธ์ ์ ํํ ๋ฌผํต์์ ๋ค๋ฅธ ๋ฌผํต์ผ๋ก ๋ถ๊ธฐ ์ํด ๋ฌผ์ด ์๋ ๋ฌผํต์ ์ ํํ๋ for๋ฌธ์ด๊ณ , ๋ด๋ถ์ for๋ฌธ์ ๋ฌผ์ ๋ถ์ ํต์ ๊ณ ๋ฅด๊ธฐ ์ํจ์ด๋ค.
ํต์ ๋ฌผ์ด ๊ฐ๋ ์ฐจ์๊ฑฐ๋, ์ ํํ ๋ฌผํต์ด ๊ฐ์ผ๋ฉด continue ์์ผ์ฃผ๊ณ ๊ณ์ฐํ๋ค. ์ดํ ๊ณ์ฐํ ๊ฐ์ check์ ์ ์ฅ๋๊ณ ์ฒซ ๋ฒ์งธ ๋ฌผํต์ ๋ฌผ์ด ์๋์ง ์๋์ง๋ฅผ ํ์ธํ๊ณ answer์ ๋ฃ์ด์คฌ๋ค. ์ด๋ ๋ฌผ์ด ์ฐจ์๋ ์ํฉ์ ์ ๊ฐ๊ตฌ๋ฌธ(...)์ ์ด์ฉํด์ ๋ณต์ฌํ๋๋ฐ for๋ฌธ์์ ๊ณ์ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์ฐธ์กฐ์ ์ํ ์๋ณธ ๋ฐฐ์ด์ ์์ ์ ๊ณ ๋ คํ๋ ์ด์ ์๋ค.
queue์ ๋ ์ด์ ๋ค์ด์๋ ๋ฌผํต์ ์ํฉ์ด ์์ ๋ while ๋ฌธ์ด ์ข ๋ฃ๋๊ณ ์ ๋ ฌํ๊ณ join์ ์ด์ฉํด์ console.log๋ฅผ ํ๋ฒ๋ง ์ฌ์ฉํ๋ฉด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
โจ๏ธ ์ฝ๋
const fs = require("fs");
const filePath =
process.platform === "linux" ? "/dev/stdin" : "./testcase/2251.txt";
const inputs = fs.readFileSync(filePath).toString().trim().split("\n");
const bottle = inputs[0].split(" ").map(Number);
const queue = [[0, 0, bottle[2]]];
const answer = new Set();
answer.add(bottle[2]);
const checkHash = new Set();
checkHash.add(queue[0].join("-"));
while (queue.length) {
const target = queue.pop();
for (let i = 0; i < 3; i++) {
if (!target[i]) continue;
for (let j = 0; j < 3; j++) {
const water = [...target];
if (i === j) continue;
if (water[j] === bottle[j]) continue;
if (water[i] <= bottle[j] - water[j]) {
water[j] += water[i];
water[i] = 0;
} else {
water[i] -= bottle[j] - water[j];
water[j] = bottle[j];
}
const check = water.join("-");
if (checkHash.has(check)) continue;
checkHash.add(check);
if (!water[0]) answer.add(water[2]);
queue.push(water);
}
}
}
console.log([...answer.values()].sort((a, b) => a - b).join(" "));'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Algorithm] ํฉ๋ถํด (๋ฐฑ์ค - 2225) (0) | 2023.05.25 |
|---|---|
| [Algorithm] ๋ก๋ (๋ฐฑ์ค - 6603) (0) | 2023.05.24 |
| [Algorithm] ์ต๋จ๊ฒฝ๋ก (๋ฐฑ์ค - 1753) (0) | 2023.05.21 |
| [Algorithm] 1ํ๋ (๋ฐฑ์ค - 5557) (1) | 2023.05.16 |
| [Algorithm] ์ต์ ๋น์ฉ ๊ตฌํ๊ธฐ (๋ฐฑ์ค - 1916) (0) | 2023.05.09 |