만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

배열 예쁘게 출력하기

면접 대비

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

요약
중괄호 배열을 각 단어와 중괄호가 한 줄에 하나씩 오고 중첩 단계마다 공백 두 칸으로 들여쓰도록 다시 출력합니다.
난이도

쉬움10점 중 3점

유형
스택, 시뮬레이션
정답자
아직 제출이 없습니다

문제

어떤 프로그래밍 언어에서 배열은 다음과 같이 정의한다.

  • 배열의 시작과 끝은 각각 여는 중괄호 {와 닫는 중괄호 }로 나타낸다.
  • 중괄호 안에는 쉼표로 구분한 값이 0개 이상 들어간다. 마지막 값 뒤에는 쉼표를 붙이지 않는다.
  • 각 값은 단어이거나 또 다른 배열이다. 단어는 영어 소문자로만 이루어진다.
  • 올바르게 정의한 배열의 예로 {}, {a,b,c}, {abc,znj,{novi,niz},pozz}가 있다.

이 언어는 중괄호나 쉼표의 앞뒤에 공백과 줄바꿈을 알맞게 넣지 않아도 오류를 내지 않는다. 값이 이렇게 빽빽하게 붙어 있는 모양이 눈에 거슬려서, 배열을 다음 규칙에 맞게 다시 쓰기로 했다.

  • 배열이 아닌 값, 그리고 배열의 시작이나 끝을 나타내는 중괄호는 각각 한 줄을 차지한다.
  • 쉼표는 바로 앞에 있는 값에 붙여 쓰고, 쉼표 뒤에서 줄을 바꾼다.
  • 배열의 시작을 나타내는 중괄호 다음부터 내용의 들여쓰기가 2칸 늘어난다.
  • 배열의 끝을 나타내는 중괄호 } 앞에서 내용의 들여쓰기가 2칸 줄어든다.

입력

첫째 줄에 문제에서 설명한 배열 SS가 주어진다. 1≤∣S∣≤15001 \le |S| \le 1500이고, SS는 영어 소문자와 중괄호, 쉼표로만 이루어져 있으며 언제나 올바르게 정의한 배열이다.

출력

모양을 바꾼 배열을 출력한다.

힌트

입력이 {a,b,{c,d},e,{}}인 경우를 따라가 보자. 처음에는 들여쓰기가 없으므로 0이다. 첫 여는 중괄호를 쓴 뒤 줄을 바꾸고 들여쓰기를 2칸 늘린다.

이어서 단어 a와 바로 뒤의 쉼표를 쓰고 줄을 바꾼 다음, 같은 2칸 들여쓰기를 적용한다. 단어 b도 같은 방법으로 쓴다.

세 번째 값은 새로운 배열이다. 이 배열을 XX라고 하자. XX는 여는 중괄호로 시작하므로 줄을 바꾸고 들여쓰기를 2칸 늘린다. 들여쓰기는 이제 모두 4칸이다. 이 들여쓰기로 단어 c와 d를 각각 한 줄에 쓴다. d는 XX의 마지막 값이므로 뒤에 쉼표가 없다.

XX의 끝을 나타내는 닫는 중괄호를 쓰기 전에 들여쓰기를 2칸 줄인다. 그 중괄호 뒤에는 쉼표를 쓰고 줄을 바꾼 다음, 바깥 배열의 남은 값을 이어서 쓴다.

예제4

  1. 예제 1

    입력
    {abc,ono,sto}
    
    예상 출력
    {
      abc,
      ono,
      sto
    }
    
  2. 예제 2

    입력
    {}
    
    예상 출력
    {
    }
    
  3. 예제 3

    입력
    {znakovi}
    
    예상 출력
    {
      znakovi
    }
    
  4. 예제 4

    입력
    {a,b,{c,d},e,{}}
    
    예상 출력
    {
      a,
      b,
      {
        c,
        d
      },
      e,
      {
      }
    }