Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโ€™ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

4-jung0115 #134

Merged
merged 5 commits into from
Aug 4, 2024
Merged

4-jung0115 #134

merged 5 commits into from
Aug 4, 2024

Conversation

jung0115
Copy link
Member

@jung0115 jung0115 commented Jul 27, 2024

[๐Ÿ”ฅ ํ’€์ด ์ฝ”๋“œ]

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

๋ฐฑ์ค€ - ์ž๋ฃŒ ๊ตฌ์กฐ | ๊ฐœ๋ฏธ๊ตด(14725)

... (์ค‘๋žต) ...

ํ–‰๋ณต์˜ ๋น„๊ฒฐ์ด ๊ฐœ๋ฏธ๊ฐ€ ์‚ฌ๋Š” ๊ฐœ๋ฏธ๊ตด์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ ์œค์ˆ˜๋Š” ๊ฐœ๋ฏธ๊ตด์˜ ๊ตฌ์กฐ๋ฅผ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด ๋กœ๋ด‡ ๊ฐœ๋ฏธ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.
๋กœ๋ด‡ ๊ฐœ๋ฏธ๋Š” ์„ผ์„œ๊ฐ€ ์žˆ์–ด ๊ฐœ๋ฏธ๊ตด์˜ ๊ฐ ์ธต์— ๋จน์ด๊ฐ€ ์žˆ๋Š” ๋ฐฉ์„ ๋”ฐ๋ผ ๋‚ด๋ ค๊ฐ€๋‹ค ๋” ์ด์ƒ ๋‚ด๋ ค๊ฐˆ ์ˆ˜ ์—†์œผ๋ฉด ๊ทธ ์ž๋ฆฌ์—์„œ ์›€์ง์ด์ง€ ์•Š๊ณ  ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ธ๋‹ค.
์ด ์‹ ํ˜ธ๋กœ ๋กœ๋ด‡ ๊ฐœ๋ฏธ๋Š” ๊ฐœ๋ฏธ๊ตด ๊ฐ ์ธต์„ ๋”ฐ๋ผ ๋‚ด๋ ค์˜ค๋ฉด์„œ ์•Œ๊ฒŒ ๋œ ๊ฐ ๋ฐฉ์— ์ €์žฅ๋œ ๋จน์ด ์ •๋ณด๋ฅผ ์œค์ˆ˜ํ•œํ…Œ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ๋‹ค.

image

๋กœ๋ด‡ ๊ฐœ๋ฏธ ๊ฐœ๋ฐœ์„ ์™„๋ฃŒํ•œ ์œค์ˆ˜๋Š” ๊ฐœ๋ฏธ๊ตด ํƒ์‚ฌ๋ฅผ ์•ž๋‘๊ณ  ๋กœ๋ด‡ ๊ฐœ๋ฏธ๋ฅผ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ธฐ ์œ„ํ•ด ์œ„ ๊ทธ๋ฆผ์˜ ๊ฐœ๋ฏธ๊ตด์— ๋กœ๋ด‡ ๊ฐœ๋ฏธ๋ฅผ ํˆฌ์ž…ํ–ˆ๋‹ค. ๋กœ๋ด‡ ๊ฐœ๋ฏธ์˜ ์ˆ˜๋Š” ๊ฐ ๊ฐœ๋ฏธ๊ตด์˜ ์ €์žฅ์†Œ๋ฅผ ๋ชจ๋‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ๋„ฃ๋Š”๋‹ค.

๋‹ค์Œ์€ ๋กœ๋ด‡ ๊ฐœ๋ฏธ๋“ค์ด ์œค์ˆ˜์—๊ฒŒ ๋ณด๋‚ด์ค€ ์ •๋ณด๋‹ค.

KIWI BANANA
KIWI APPLE
APPLE APPLE
APPLE BANANA KIWI
๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ๋กœ๋ด‡ ๊ฐœ๋ฏธ๊ฐ€ ๊ฐ ์ธต๋งˆ๋‹ค ์ง€๋‚˜์˜จ ๋ฐฉ์— ์žˆ๋Š” ๋จน์ด ์ด๋ฆ„์„ ๋œปํ•œ๋‹ค.

์œค์ˆ˜๋Š” ๋กœ๋ด‡ ๊ฐœ๋ฏธ๋“ค์ด ๋ณด๋‚ด์ค€ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐœ๋ฏธ๊ตด์˜ ๊ตฌ์กฐ๋ฅผ ์†์œผ๋กœ ๊ทธ๋ ค๋ดค๋‹ค.

APPLE
--APPLE
--BANANA
----KIWI
KIWI
--APPLE
--BANANA
๊ฐœ๋ฏธ๊ตด์˜ ๊ฐ ์ธต์€ "--" ๋กœ ๊ตฌ๋ถ„์„ ํ•˜์˜€๋‹ค. ๋˜ ๊ฐ™์€ ์ธต์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐฉ์ด ์žˆ์„ ๋•Œ์—๋Š” ์‚ฌ์ „ ์ˆœ์„œ๊ฐ€ ์•ž์„œ๋Š” ๋จน์ด ์ •๋ณด๊ฐ€ ๋จผ์ € ๋‚˜์˜จ๋‹ค.

... (์ค‘๋žต) ...
ํ–‰๋ณต์˜ ๋น„๊ฒฐ์„ ์•Œ๊ธฐ ์œ„ํ•ด ์œค์ˆ˜๋ฅผ ๋„์™€ ๊ฐœ๋ฏธ๊ตด์ด ์–ด๋–ค ๊ตฌ์กฐ์ธ์ง€ ํ™•์ธํ•ด๋ณด์ž.

โœ”๏ธ ์†Œ์š”๋œ ์‹œ๊ฐ„

35๋ถ„

โœจ ์ˆ˜๋„ ์ฝ”๋“œ

๋ฌธ์ œ์— ์ œ์‹œ๋œ ๊ทธ๋ฆผ์ด ๋„ˆ๋ฌด ํŠธ๋ฆฌ์˜ ํ˜•ํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  ์žˆ์–ด์„œ ๋ฐ”๋กœ ํŠธ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜…
๋‹ค๋งŒ ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ ์ž์‹ ๋…ธ๋“œ๋กœ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ , ๊ทธ๋ฆฌ๊ณ  ์ž์‹ ๋…ธ๋“œ๋ฅผ ๋จน์ด ์•ŒํŒŒ๋ฒณ ์ˆœ์œผ๋กœ ๋ณด์—ฌ์ค˜์•ผ ํ•œ๋‹ค๋Š” ์ ์— ์ฃผ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค!

์ž์‹์œผ๋กœ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹์„ list๋กœ ๊ด€๋ฆฌํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค

data class Node(
  var feed: String, // ๋จน์ด
  var nodes: MutableList<Node>
)

๊ทธ๋ž˜์„œ ์ด๋ ‡๊ฒŒ ๋…ธ๋“œ ์ •๋ณด์— ๋จน์ด ์ด๋ฆ„๊ณผ ์ž์‹์„ ์ €์žฅํ•  ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ค์ •ํ•ด์คฌ์Šต๋‹ˆ๋‹ค

๋ฌธ์ œ์— ์ œ์‹œ๋œ ์˜ˆ์ œ๋กœ ์„ค๋ช…์„ ํ•˜์ž๋ฉด, ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ €์žฅ์ด ๋œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

image

๐Ÿค” ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

  1. ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ์ž์‹์— ํ•ด๋‹น ๋จน์ด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค
  2. ์—†๋‹ค๋ฉด ์ถ”๊ฐ€ํ•œ๋‹ค
  3. ํ˜„์žฌ ๋จน์ด๊ฐ€ ๋ถ€๋ชจ๊ฐ€ ๋˜๊ณ  ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค

์ €๋Š” ๊ฐœ๋ฏธ๊ฐ€ ์ง€๋‚˜์˜จ ๊ฒฝ๋กœ์˜ ์ž…๋ ฅ ์ •๋ณด๋งˆ๋‹ค ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด์„œ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ •๋ฆฌ๋ฅผ ํ•ด์คฌ์Šต๋‹ˆ๋‹ค. ์ตœ์ƒ์œ„์˜ ๊ฐœ๋ฏธ๊ตด ์ž…๊ตฌ๋ฅผ root๋กœ ๋‘๊ณ , ์ž…๋ ฅ ์ˆœ์„œ๋Œ€๋กœ ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

Tree๋กœ ์ •๋ฆฌ๋œ ์ •๋ณด๋ฅผ ์ถœ๋ ฅ ํ˜•์‹์— ๋งž์ถฐ์„œ ์ •๋ฆฌ

๊ฐœ๋ฏธ๊ตด ์ž…๊ตฌ, ์ฆ‰ root ๋…ธ๋“œ ์ •๋ณด๋Š” ์ถœ๋ ฅํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ์•„๋ž˜ ๋…ธ๋“œ๋ถ€ํ„ฐ ํƒ์ƒ‰์„ ํ•ด์ค๋‹ˆ๋‹ค. ๋‹จ, ์•ŒํŒŒ๋ฒณ ์ˆœ์œผ๋กœ ์ถœ๋ ฅ์„ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ •๋ ฌํ•˜๊ณ , ์ „์œ„์ˆœํšŒ ๋ฐฉ์‹ํ•˜๋ฉด์„œ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค

โœ… ์ตœ์ข… ์ฝ”๋“œ

// 4์ฐจ์‹œ 2024.07.27.ํ†  : ๋ฐฑ์ค€ - ๊ฐœ๋ฏธ๊ตด(14725)
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.StringTokenizer

const val DEPTH_STRING = "--"

data class Node(
  var feed: String, // ๋จน์ด
  var nodes: MutableList<Node>
)

var answer: StringBuilder = StringBuilder()

fun main() {
  val br = BufferedReader(InputStreamReader(System.`in`))

  val N = br.readLine().toInt()

  val root = Node("", mutableListOf())
  
  for(i: Int in 1..N) {
    val st = StringTokenizer(br.readLine())
    val num = st.nextToken().toInt()

    // ํŠธ๋ฆฌ๋กœ ์ •๋ฆฌ
    var parent = root
    for(j: Int in 1..num) {
      val currentFeed = st.nextToken()
      var index = -1
      // ๋ถ€๋ชจ ๋…ธ๋“œ์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ
      for(k: Int in 0..parent.nodes.size - 1) {
        if(parent.nodes[k].feed.equals(currentFeed)) {
          index = k
          break
        }
      }
      // ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ž์‹์œผ๋กœ ์ถ”๊ฐ€
      if(index == -1) {
        parent.nodes.add(Node(currentFeed, mutableListOf()))
        index = parent.nodes.size - 1
      }
      
      // ๋‹ค์Œ ์ž์‹์„ ์ฒดํฌํ•˜๊ธฐ ์œ„ํ•ด depth ์ฆ๊ฐ€
      parent = parent.nodes[index]
    }
  }

  root.nodes.sortBy{ it.feed } // ์ž์‹ ๋…ธ๋“œ๋ฅผ ๋จน์ด ์ด๋ฆ„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
  for(node in root.nodes) {
    tree(node, "") // depth 1
  }

  print(answer)
}

fun tree(current: Node, depth: String) {
  answer.append(depth).append(current.feed).append("\n")

  current.nodes.sortBy{ it.feed } // ์ž์‹ ๋…ธ๋“œ๋ฅผ ๋จน์ด ์ด๋ฆ„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
  for(node in current.nodes) {
    tree(node, depth + DEPTH_STRING) // Depth ์ฆ๊ฐ€์‹œ์ผœ์ฃผ๊ณ  ์ž์‹ ๋…ธ๋“œ๋„ ํƒ์ƒ‰
  }
}

๐Ÿ“š ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ๋œ ๋‚ด์šฉ

ps. ์ด๋ฒˆ ์ฐจ์‹œ์—๋Š” ๋‹ค๋ฅธ ์ผ์ • ๋•Œ๋ฌธ์— ๋ฌธ์ œ๋ฅผ ํ’€ ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•ด์„œ ์ •๋‹ต๋ฅ  ๋†’์€ ๋ฌธ์ œ๋ฅผ ์„ ํƒํ–ˆ๋Š”๋ฐ, ๋‹ค์Œ ๋ฌธ์ œ๋Š” ์ข€ ๋” ์‹œ๊ฐ„๊ณผ ๊ณ ๋ฏผ์ด ๋งŽ์ด ํ•„์š”ํ•œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!

@tgyuuAn
Copy link
Member

tgyuuAn commented Jul 27, 2024

์ด ๋ฌธ์ œ AlgoLeadMe/AlgoLeadMe-1#155 (comment) ๋ž‘ ๋งค์šฐ ๋น„์Šทํ•œ๋ฐ,

์ด๋Ÿฌํ•œ ํŠธ๋ฆฌ ๋ชจ์–‘์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํŠธ๋ผ์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ ๋ฐ”๋กœ ํŠธ๋ฆฌ๋กœ ์ด๋ ‡๊ฒŒ ๋”ฐ๋”ฐ๋”ฐใ…‚๋ฝœ ํ•˜์‹ ๊ฑฐ ๋Œ€๋ฐ• ๋˜‘๋˜‘ํ•˜์‹œ๋„ค์š” .................................

๋กœ์ง๋„ ์™„์ „ ํŠธ๋ผ์ด๋ž‘ ๋™์ผํ•˜๊ตฌ ๋Œ€๋ฐ• ..

์ด ๋ฌธ์ œ ํ‘ธ์…จ์œผ๋ฉด https://www.acmicpc.net/problem/7432 ์–˜๋Š” ๊ณต์งœ์—์š”!

@jung0115
Copy link
Member Author

์ด ๋ฌธ์ œ AlgoLeadMe/AlgoLeadMe-1#155 (comment) ๋ž‘ ๋งค์šฐ ๋น„์Šทํ•œ๋ฐ,

์ด๋Ÿฌํ•œ ํŠธ๋ฆฌ ๋ชจ์–‘์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํŠธ๋ผ์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ ๋ฐ”๋กœ ํŠธ๋ฆฌ๋กœ ์ด๋ ‡๊ฒŒ ๋”ฐ๋”ฐ๋”ฐใ…‚๋ฝœ ํ•˜์‹ ๊ฑฐ ๋Œ€๋ฐ• ๋˜‘๋˜‘ํ•˜์‹œ๋„ค์š” .................................

๋กœ์ง๋„ ์™„์ „ ํŠธ๋ผ์ด๋ž‘ ๋™์ผํ•˜๊ตฌ ๋Œ€๋ฐ• ..

์ด ๋ฌธ์ œ ํ‘ธ์…จ์œผ๋ฉด https://www.acmicpc.net/problem/7432 ์–˜๋Š” ๊ณต์งœ์—์š”!

ํ—‰ ๋ฌธ์ž์—ด ์ €์žฅ/๊ด€๋ฆฌํ•˜๋Š” ํŠธ๋ฆฌ๊ฐ€ ํŠธ๋ผ์ด๊ตฐ์š”...! ์ด ๋ฌธ์ œ๋„ ํ•œ ๋ฒˆ ํ’€์–ด๋ณด๊ณ  ํŠธ๋ผ์ด ๊ฐœ๋…์„ ํ™•์‹คํžˆ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ‘

Copy link
Member

@janghw0126 janghw0126 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ €๋„ ์ด ๋ฌธ์ œ๋ฅผ ์ •๋ ฌํ•œ ํ›„์— ์™„์ „ํƒ์ƒ‰์„ ํ•˜๋Š” ๋กœ์ง์œผ๋กœ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค!
์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ๋‚œ ํ›„, ์ฃผ์–ด์ง„ ๋จน์ด ์ •๋ณด์—์„œ ์ค‘๋ณต๋˜๋Š” ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋Š” ์ƒ๋žตํ•˜๊ณ  ์ถœ๋ ฅํ•˜๋„๋ก ๊ตฌํ˜„ํ–ˆ๋”๋‹ˆ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์„œ ์ž์‹ ๋…ธ๋“œ์˜ ์ค‘๋ณต ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋กœ์ง๋„ ํ•จ๊ป˜ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

import sys
input = sys.stdin.readline

# ์ž…๋ ฅ ์ฒ˜๋ฆฌ
M = int(input())
ant_nest = []
for _ in range(M):
    elements = list(input().split())
    ant_nest.append(elements[1:])

# ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌ
ant_nest.sort()

separator = '--'
output = []

# ํŠธ๋ฆฌ ๊ตฌ์กฐ ์ถœ๋ ฅ
for i in range(M):
    if i == 0:
        for j in range(len(ant_nest[i])):
            output.append(separator * j + ant_nest[i][j])
    else:
        common_prefix_len = 0
        for j in range(len(ant_nest[i])):
            if len(ant_nest[i - 1]) <= j or ant_nest[i - 1][j] != ant_nest[i][j]:
                break
            else:
                common_prefix_len = j + 1
        for j in range(common_prefix_len, len(ant_nest[i])):
            output.append(separator * j + ant_nest[i][j])

# ๊ฒฐ๊ณผ ์ถœ๋ ฅ
for line in output:
    print(line)

์ด๋Ÿฌํ•œ ํŠธ๋ฆฌ ๋ชจ์–‘์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํŠธ๋ผ์ด๋ผ๊ณ  ํ•˜๋Š”๊ตฐ์š”!
ํƒœ๊ทœ๋‹˜ ๋•๋ถ„์— ์ƒˆ๋กœ์šด ๊ฐœ๋…์„ ์ ‘ํ–ˆ์Šต๋‹ˆ๋‹น ๊ฐ์‚ฌํ•ด์š”๐Ÿ˜Š
์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ์ข€ ๋” ์ž์„ธํžˆ ๊ณต๋ถ€ํ•ด๋ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค!

์ด๋ฒˆ PR๋„ ์ˆ˜๊ณ ํ•˜์…จ์–ด์š”๐Ÿ˜™๐Ÿ˜™

@tgyuuAn
Copy link
Member

tgyuuAn commented Aug 1, 2024

์ €๋„ ์ด ๋ฌธ์ œ๋ฅผ ์ •๋ ฌํ•œ ํ›„์— ์™„์ „ํƒ์ƒ‰์„ ํ•˜๋Š” ๋กœ์ง์œผ๋กœ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค! ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ๋‚œ ํ›„, ์ฃผ์–ด์ง„ ๋จน์ด ์ •๋ณด์—์„œ ์ค‘๋ณต๋˜๋Š” ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋Š” ์ƒ๋žตํ•˜๊ณ  ์ถœ๋ ฅํ•˜๋„๋ก ๊ตฌํ˜„ํ–ˆ๋”๋‹ˆ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์„œ ์ž์‹ ๋…ธ๋“œ์˜ ์ค‘๋ณต ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋กœ์ง๋„ ํ•จ๊ป˜ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

import sys
input = sys.stdin.readline

# ์ž…๋ ฅ ์ฒ˜๋ฆฌ
M = int(input())
ant_nest = []
for _ in range(M):
    elements = list(input().split())
    ant_nest.append(elements[1:])

# ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌ
ant_nest.sort()

separator = '--'
output = []

# ํŠธ๋ฆฌ ๊ตฌ์กฐ ์ถœ๋ ฅ
for i in range(M):
    if i == 0:
        for j in range(len(ant_nest[i])):
            output.append(separator * j + ant_nest[i][j])
    else:
        common_prefix_len = 0
        for j in range(len(ant_nest[i])):
            if len(ant_nest[i - 1]) <= j or ant_nest[i - 1][j] != ant_nest[i][j]:
                break
            else:
                common_prefix_len = j + 1
        for j in range(common_prefix_len, len(ant_nest[i])):
            output.append(separator * j + ant_nest[i][j])

# ๊ฒฐ๊ณผ ์ถœ๋ ฅ
for line in output:
    print(line)

์ด๋Ÿฌํ•œ ํŠธ๋ฆฌ ๋ชจ์–‘์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํŠธ๋ผ์ด๋ผ๊ณ  ํ•˜๋Š”๊ตฐ์š”! ํƒœ๊ทœ๋‹˜ ๋•๋ถ„์— ์ƒˆ๋กœ์šด ๊ฐœ๋…์„ ์ ‘ํ–ˆ์Šต๋‹ˆ๋‹น ๊ฐ์‚ฌํ•ด์š”๐Ÿ˜Š ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ์ข€ ๋” ์ž์„ธํžˆ ๊ณต๋ถ€ํ•ด๋ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค!

์ด๋ฒˆ PR๋„ ์ˆ˜๊ณ ํ•˜์…จ์–ด์š”๐Ÿ˜™๐Ÿ˜™

ํ˜œ์›์‹œ์น˜ ํ™”์ด๋ง ํ™”์ด๋ง ์—ด์‹ฌํžˆ ํ•ด์„œ ์–ด์„œ ์„œ์šธ ์˜ฌ๋ผ์˜ค์‡ผ~

@LJEDD2
Copy link
Collaborator

LJEDD2 commented Aug 3, 2024

๋ฌธ์ž์—ด์„ ์ €์žฅํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ธ ํŠธ๋ผ์ด(Trie)์— ๋Œ€ํ•ด ์ฒ˜์Œ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค .... !! ์ •๋ง ๋Œ€๋‹จํ•˜์‹ญ๋‹ˆ๋‹ค ๋‹ค๋“ค ... ใ… ใ… 

๋ฌธ์ž์—ด์˜ ์ ‘๋‘์‚ฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๋น„์–ด์žˆ๊ณ , ์—ฌ๋Ÿฌ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๋ฌธ์ž์—ด์˜ ๋์„ ํ‘œ์‹œํ•˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค๋Š” ์ ๊นŒ์ง€ ๊ณต๋ถ€ํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค !

์ €๋„ ํŠธ๋ฆฌ ๋ฌธ์ œ ํ’€๋ฉด์„œ ์ด๋Ÿฐ ๋ฌธ์ œ ์œ ํ˜•์„ ํ•œ๋ฒˆ ๋„์ „ํ•ด๋ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค :)
์ด๋ฒˆ ์ฃผ์ฐจ๋„ ๊ณ ์ƒ ๋งŽ์œผ์…จ์Šต๋‹ˆ๋‹ค๐ŸŒŸ๐Ÿ’ช

@jung0115 jung0115 mentioned this pull request Aug 4, 2024
Copy link
Collaborator

@wonjunYou wonjunYou left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด๊ฒƒ์ €๊ฒƒ ๋ฐ”๋น ์„œ ์ด์ œ์•ผ ๋ฆฌ๋ทฐ๋ฅผ ๋“œ๋ฆฌ๋„ค์š”ใ… ใ…  ๐Ÿ˜‚

์ €๋„ ๋ฐ”๋กœ ๋„์ „ํ•ด ๋ณด์•˜๋Š”๋ฐ์š”,,!! ์ด ๋ฌธ์ œ์—์„œ๋Š” ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋  ๋•Œ key๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, TreeMap์„ ์ฑ„ํƒํ–ˆ์Šต๋‹ˆ๋‹ค! treeMap์€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ, Comparator๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์–ด key๊ฐ’์„ ์ •๋ ฌํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ์— ๋”ฑ ์ ํ•ฉํ•˜๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์–ด์š” :)

import java.io.*;
import java.util.*;

public class Main {
    static StringBuilder result = new StringBuilder();
    static TreeMap<String, TreeMap> treeMap = new TreeMap<>();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        int k;

        for (int i = 0; i < n; i++) {
            String[] inputs = br.readLine().split(" ");
            k = Integer.parseInt(inputs[0]);

            TreeMap currentFoodInfo = treeMap;

            for (int j = 0; j < k; j++) {
                String food = inputs[j + 1];

                if (!currentFoodInfo.containsKey(food)) {
                    currentFoodInfo.put(food, new TreeMap<>());
                }

                currentFoodInfo = (TreeMap)currentFoodInfo.get(food);
            }
        }

        draw(treeMap, 0);

        System.out.println(result);
    }

    private static void draw(TreeMap<String, TreeMap> treeMap, int nodeCount) {
        for (Object food : treeMap.keySet()) {
            for (int i = 0; i < nodeCount; i++) {
                result.append("--");
            }
            result.append(food).append("\n");

            draw(treeMap.get(food), nodeCount + 1);
        }
    }

}

์†Œ๋งˆ ํ•˜์‹œ๋ฉด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์•ˆ ๋ฐ€๋ฆฌ๊ตฌ ์„ฑ์‹คํžˆ ํ•˜์‹œ๋Š” ๊ฒŒ ๋Œ€๋‹จํ•˜์‹  ๊ฒƒ ๊ฐ™์•„์š”,, ์ €๋„ ๋”์šฑ ๋ถ„๋ฐœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ใ… ใ… 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants