๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[๋ฐฑ์ค€] 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๋ฒˆ ๋งํฌ

๐Ÿ‘‰ https://www.acmicpc.net/problem/14725

๋Œ“๊ธ€์ˆ˜0