표현식 평탄화

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

요약
중첩된 괄호 표현식을 해석해 반복을 펼친 문자열을 공백 없이 출력한다.
난이도

보통10점 중 4점

유형
문자열, 재귀, 구현
정답자
아직 제출이 없습니다

문제

다음과 같이 정의된 언어를 생각해 봅시다. 이 언어의 표현식(expression) 은 다음 두 가지 중 하나입니다.

  • 문자: 하나의 소문자 cc.
  • 묶음: (e1 e2 ⋯ et n)(e_1\ e_2\ \cdots\ e_t\ n) 형태. 0개 이상의 표현식 e1,e2,…,ete_1, e_2, \ldots, e_t 뒤에 자연수 nn 이 오며, t≥0t \ge 0 입니다.

표현식의 평탄화(flattening) 는 다음과 같이 정의됩니다.

  • 하나의 문자는 자기 자신으로 평탄화됩니다.
  • (e1 e2 ⋯ et n)(e_1\ e_2\ \cdots\ e_t\ n) 형태의 표현식은, 각 eie_i 의 평탄화를 순서대로 이어 붙인 문자열을 nn 번 반복하여 평탄화됩니다.

즉, f(e)f(e) 를 ee 의 평탄화라 하고 ++ 를 문자열 이어 붙이기라 하면, f((e1 e2 ⋯ et n))f\big((e_1\ e_2\ \cdots\ e_t\ n)\big) 는 다음과 같습니다.

f(e1)+f(e2)+⋯+f(et)⏟1+f(e1)+f(e2)+⋯+f(et)⏟2+⋯+f(e1)+f(e2)+⋯+f(et)⏟n\underbrace{f(e_1)+f(e_2)+\cdots+f(e_t)}_{1} + \underbrace{f(e_1)+f(e_2)+\cdots+f(e_t)}_{2} + \cdots + \underbrace{f(e_1)+f(e_2)+\cdots+f(e_t)}_{n}

아래 표는 몇 가지 표현식과 그 평탄화 결과를 보여 줍니다.

표현식평탄화 결과
ww
(c 4)cccc
(a (b c 2) 3)abcbcabcbcabcbc

주어진 표현식을 평탄화하는 프로그램을 작성하세요.

입력

입력은 하나 이상의 테스트 케이스로 이루어집니다. 각 테스트 케이스는 문법에 맞게 작성된 표현식 하나이며, $ 문자가 그 표현식의 끝을 나타냅니다. 입력의 마지막 줄은 테스트 케이스가 아니며, $ 문자 하나만으로 이루어집니다(앞뒤에 공백이 있을 수 있습니다).

입력의 모든 표현식은 위에서 정의한 문법에 따라 문법적으로 올바릅니다. 표현식에는 앞, 뒤, 중간에 공백이 있을 수 있으며, 이러한 공백은 모두 무시해야 합니다. 문자와 숫자는 서로 최소한 하나의 공백으로 구분됩니다.

출력

각 테스트 케이스의 표현식에 대해, 그 평탄화 결과를 한 줄에 하나씩 출력하세요. 출력에는 줄바꿈 외의 어떤 공백도 있어서는 안 됩니다.

예제3

  1. 예제 1

    입력
    w$
    (c 4)$
    (a (b c 2) 3)$
    $
    
    예상 출력
    w
    cccc
    abcbcabcbcabcbc
    
  2. 예제 2

    입력
    z$
    $
    
    예상 출력
    z
    
  3. 예제 3

    입력
    (a 3)$
    $
    
    예상 출력
    aaa