압축된 단어 풀기

면접 대비

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

요약
중첩된 압축 단어를 안쪽부터 이어 붙이고 묶음마다 n번 반복해 펼칩니다.
난이도

보통10점 중 4점

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

문제

스티브는 글을 압축하는 방법을 하나 만들었다. 실제로 길이가 줄어들지 않을 때도 있다. 스티브는 단어 하나만 다루며, 다음 규칙으로 "압축된 단어"를 정의한다.

  1. 소문자 한 글자는 압축된 단어이다.
  2. (e1 e2 … et n)(e_1\ e_2\ \dots\ e_t\ n) 은 압축된 단어이다. 여기서 tt와 nn은 음이 아닌 정수이고, 각 eie_i는 압축된 단어이다.

한 글자짜리 압축된 단어는 압축하지 않은 단어와 같다. 압축된 단어 (e1 e2 … et n)(e_1\ e_2\ \dots\ e_t\ n)을 푸는 방법은 이렇다. 각 eie_i를 먼저 풀고, 푼 결과를 순서대로 이어 붙여 새 단어를 만든 다음, 그 단어를 nn번 이어 붙인다. 예를 들면 이렇다.

  • x는 x로 풀린다.
  • (t 3)은 ttt로 풀린다.
  • (a (b c 2) 3)은 abcbcabcbcabcbc로 풀린다.

압축된 단어를 푸는 프로그램을 작성하시오.

입력

입력은 테스트 케이스 하나 이상으로 이루어진다. 각 테스트 케이스는 올바르게 만들어진 압축된 단어 하나이고 한 줄을 차지한다. 줄의 끝은 $ 문자로 표시한다. 입력의 마지막 줄에는 $ 하나만 있으며(앞뒤에 공백이 있을 수 있다), 이 줄은 테스트 케이스가 아니다. 입력에 있는 압축된 단어는 모두 위 규칙에 맞다. 압축된 단어의 앞, 뒤, 중간에 공백이 들어갈 수 있고, 이런 공백은 무시한다. 글자와 숫자 사이에는 공백이 적어도 하나 있다.

출력

각 테스트 케이스마다 푼 단어를 한 줄에 출력한다. 줄바꿈 말고는 출력에 공백이 없어야 한다. 푼 결과가 빈 단어일 수 있고, 그때는 빈 줄을 출력한다.

예제1

  1. 예제 1

    입력
    x$
    (t 3)$
    ( a ( b c 2 )   3)     $
    $
    
    예상 출력
    x
    ttt
    abcbcabcbcabcbc