๐ ์๊ณ ๋ฆฌ์ฆ/๋ฐฑ์ค
[๋ฐฑ์ค] 14725๋ฒ: ๊ฐ๋ฏธ๊ตด (Node.js)
JaeBBang
2025. 4. 17. 13:28




์ ๊ทผ๋ฐฉ์
๋ฌธ์ ๋ฅผ ์ดํด๋ณด๋ฉด ์ฐ์ ๊ฐ ๊ฒฝ๋ก๊ฐ ํธ๋ผ์ด ์๋ฃ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
ํธ๋ผ์ด ์๋ฃ๊ตฌ์กฐ๋?
๊ฒ์์ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ํ ์ ์๋๋ก ์ค๊ณ๋ ํธ๋ฆฌ ๊ธฐ๋ฐ ์๋ฃ๊ตฌ์กฐ์ด๋ฉฐ, ์ฃผ๋ก ๋จ์ด ๋ชฉ๋ก์์ ๋จ์ด๋ฅผ ๊ฒ์ํ๊ฑฐ๋ ์๋ ์์ฑ ๊ธฐ๋ฅ, ์ฌ์ ๊ฒ์, ๋ฌธ์์ด ํจํด ๋งค์นญ ๋ฑ์ ์ฌ์ฉ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ์ค์ํ ์ ์ ๋ฌธ์์ด์ ํธ๋ฆฌ ํํ๋ก ์ ์ฅํ๊ณ , ๊ณตํต ์ ๋์ฌ๋ฅผ ๊ณต์ ํ์ฌ ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ์ต์ํํ๋ ๊ฒ์ ๋๋ค.
๊ฐ๋จํ ์ค๋ช ์ผ๋ก ์์ํ์ฌ ๋ค์ ์งํํด๋ณด์๋ฉด, ์ด ๋ฌธ์ ์์ ์๊ตฌํ๋ ์ฃผ์ ์์ ์ ์ ๋ ฅ๋ ๊ฒฝ๋ก๋ฅผ ํธ๋ผ์ด์ ์ฝ์ ํ๋ ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด
2 KIWI BANANA ๋ KIWI -> BANANA์ ๊ฒฝ๋ก๋ฅผ ๋ง๋๋ ๊ฒ์ผ๋ก KIWI ์๋์ BANANA๊ฐ ์๋ ๊ฒ์ด์ง์.
๊ฒฐ๊ตญ ํธ๋ผ์ด๋ฅผ ์ฌ๊ท์ ์ผ๋ก ํธ์ถํ์ฌ ์์ชฝ depth ๊น์ง --๋ฅผ ์ถ๋ ฅํ์ฌ ๊ณ์ธต๊ตฌ์กฐ๋ฅผ ๋ง๋ค๋ฉด ๋๊ฒ ์ต๋๋ค.
ํ์ด โฐ
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
rl.on("line", function (line) {
input.push(line.trim());
}).on("close", function () {
// ์ฒซ์งธ์ค: ๊ฒฝ๋ก์ ์
const num = parseInt(input[0]);
// ํธ๋ผ์ด ์๋ฃ๊ตฌ์กฐ์ ๋ฃจํธ ๋
ธ๋ (๋น ๊ฐ์ฒด)
const trie = {};
for (let i = 1; i <= num; i++) {
// ์ฒซ์งธ์ค์ ์ ์ธํ ๋๋จธ์ง ๊ฐ ๋ฐฐ์ด๋ก ๋ง๋ค๊ธฐ
const [, ...route] = input[i].split(" ");
// ํธ๋ผ์ด์ ๊ฒฝ๋ก ์ฝ์
insert(trie, route);
}
submit(trie, 0);
});
function insert(trie, route) {
// ๋ฃจํธ ๊ฐ์ฒด ์์ฑ
// obj๊ฐ trie์ ๋ฃจํธ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ(๊ฐ๋ฆฌํค๊ณ )ํ๊ณ ์์
let obj = trie;
for (let i of route) {
// ๋น ๊ฐ์ฒด ์์ ์ผ์น๋๋ ๊ฐ์ด ์์ผ๋ฉด / ์ต์ด ์คํ ์ obj = {}
// obj์ ์๋ฅผ ๋ค์ด "KIWI"์ ๊ฐ์ ๋ฌธ์์ด์ ํค๊ฐ์ผ๋ก ๊ฐ์ง๋ ๋น๊ฐ์ฒด ์์ฑ
if (!obj[i]) {
obj[i] = {};
}
// obj๋ฅผ obj[i]๊ฐ ๊ฐ๋ฆฌํค๋ {}๊ฐ์ ๋ฐ๋ผ๋ณด๊ฒํจ
// ์๋ฅผ ๋ค์ด [ 'KIWI', 'BANANA' ]๋ก ์ต์ด ์คํ ์ ํ์ฌ obj๋ { KIWI: { } } ์ KIWI์ชฝ์ ๋ฐ๋ผ๋ณด๊ณ ์๊ธฐ์ ๋น๊ฐ์ฒด๋ก ๋ณด์
// ๋๋ฒ์งธ ์คํ์ { KIWI: { BANANA: { } } } ์ BANANA์ชฝ์ ๋ฐ๋ผ๋ณด๊ณ ์๊ธฐ์ ๋น๊ฐ์ฒด๋ก ๋ณด์
obj = obj[i];
}
}
function submit(trie, depth) {
// ๊ฐ ํค๊ฐ๋ค์ ์ํ๋ฒณ์์ผ๋ก sort
let arr = Object.keys(trie).sort();
// 0๋ฒ์งธ๋ repeat์คํ x
arr.forEach((item) => {
console.log(`${"--".repeat(depth)}${item}`);
// ์ฌ๊ทํจ์๋ฅผ ํตํด ํธ๋ผ์ด๊ตฌ์กฐ์ ๋ง์ง๋งdepth๊น์ง ์ฌ๊ทํธ์ถ
submit(trie[item], depth + 1);
});
}
๋ฐฑ์ค 14725๋ฒ ๋งํฌ