디스크 트리

면접 대비

시간 제한1초메모리 제한128 MB

요약
전체 디렉터리 경로들이 주어질 때 트리를 복원해 각 디렉터리 이름을 깊이만큼 들여쓰기해 한 줄에 하나씩 출력하고, 같은 부모의 자식들은 ASCII 순서로 정렬합니다.
난이도

보통10점 중 4점

유형
트라이, 정렬, DFS
정답자
아직 제출이 없습니다

문제

어느 날 노트북이 갑자기 켜지지 않게 되었습니다. 다행히 그 안에 들어 있던 중요한 디렉터리들의 전체 경로는 미리 텍스트 파일에 따로 저장해 두었습니다. 예를 들면 WINNT\SYSTEM32\CERTSRV\CERTCO~1\X86 과 같은 형식입니다.

중요한 디렉터리들의 전체 경로가 모두 주어질 때, 이 경로들로부터 디렉터리 구조(트리)를 복원하여 보기 좋게 출력하는 프로그램을 작성하세요.

입력

첫째 줄에 중요한 디렉터리 전체 경로의 개수 NN (1≤N≤5001 \le N \le 500)이 주어집니다. 이어지는 NN개의 줄에 각각 하나의 디렉터리 경로가 주어집니다.

  • 각 경로는 공백을 포함하지 않는 한 줄짜리 문자열이며, 길이는 8080자를 넘지 않습니다.
  • 경로에서 디렉터리는 역슬래시 \ 로 구분됩니다.
  • 각 디렉터리 이름의 길이는 11자 이상 88자 이하이며, 알파벳 대문자, 숫자, 특수 문자로 이루어집니다.
  • 디렉터리 이름에 쓰일 수 있는 특수 문자는 !#$%&'()-@^_`{}~ 입니다.

출력

복원한 디렉터리 구조를 다음 규칙에 따라 보기 좋게 출력합니다.

  • 한 줄에 디렉터리 이름을 하나씩 출력합니다.
  • 각 줄 맨 앞의 공백 개수는 그 디렉터리의 깊이를 나타냅니다. 최상위(루트) 디렉터리는 공백 없이 출력합니다.
  • 어떤 디렉터리의 자식 디렉터리는 그 부모보다 공백을 정확히 11개 더 붙여서 출력합니다.
  • 같은 부모를 가진 자식 디렉터리들은 이름의 사전순(ASCII 문자 코드 오름차순)으로 출력합니다.

힌트

이 이야기는 실화를 재해석한 것으로, 다음 날 아침에 일어나 보니 노트북이 다시 켜졌다고 합니다.

예제3

  1. 예제 1

    입력
    7
    WINNT\SYSTEM32\CONFIG
    GAMES
    WINNT\DRIVERS
    HOME
    WIN\SOFT
    GAMES\DRIVERS
    WINNT\SYSTEM32\CERTSRV\CERTCO~1\X86
    
    예상 출력
    GAMES
     DRIVERS
    HOME
    WIN
     SOFT
    WINNT
     DRIVERS
     SYSTEM32
      CERTSRV
       CERTCO~1
        X86
      CONFIG
    
  2. 예제 2

    입력
    1
    A
    
    예상 출력
    A
    
  3. 예제 3

    입력
    1
    A\B\C\D\E
    
    예상 출력
    A
     B
      C
       D
        E