만드는 중입니다

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

중첩 깊이

면접 대비

시간 제한20초메모리 제한1024 MB

요약
숫자로 이루어진 문자열 S가 주어질 때, 각 숫자가 그 위치의 중첩 깊이와 같도록 괄호를 최소한으로 넣어 짝이 맞는 문자열을 만들어야 합니다.
난이도

보통10점 중 4점

유형
그리디, 문자열, 구현
정답자
아직 제출이 없습니다

문제

tl;dr: 숫자로 이루어진 문자열 S가 주어진다. 괄호를 최소 개수로 끼워 넣어서 결과 문자열이 균형을 이루고, 각 숫자 d가 정확히 d쌍의 짝이 맞는 괄호 안에 놓이게 하라.

두 괄호의 중첩은 두 괄호 사이에 있는 부분 문자열이다. 여는 괄호와 그보다 오른쪽에 있는 닫는 괄호는, 중첩이 비어 있거나 중첩 안의 모든 괄호가 중첩 안의 다른 괄호와 짝을 이루면 짝이 맞는다고 한다. 위치 p의 중첩 깊이는 p가 중첩 안에 포함되는 짝 맞는 괄호 쌍의 개수 m이다.

예를 들어 0((2)1), (((3))1(2)), ((((4)))), ((2))((2))(1)에서는 모든 숫자가 중첩 깊이와 같다. 앞의 세 문자열은 같은 숫자를 같은 순서로 갖는 문자열 중 길이가 가장 짧다. 마지막 문자열은 ((22)1)도 숫자 221을 갖고 더 짧으므로 최소가 아니다.

S가 주어질 때, 괄호와 숫자로 이루어진 문자열 S'를 찾아라. S'는 다음 조건을 만족해야 한다.

  • S'의 모든 괄호는 다른 괄호와 짝을 이룬다.
  • S'에서 괄호를 모두 지우면 S가 된다.
  • S'의 각 숫자는 그 위치의 중첩 깊이와 같다.
  • S'의 길이가 최소다.

입력

첫 줄에 테스트 케이스 수 TT가 주어진다. 이어서 TT개의 줄에 각각 문자열 S가 한 개씩 주어진다.

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄을 출력한다. x는 1부터 시작하는 테스트 케이스 번호이고, y는 위에서 정의한 S'이다.

제한

1 ≤ T ≤ 100

1 ≤ S의 길이 ≤ 100

힌트

()0000(), (1)0(((()))1), (1)(11)000은 각각 샘플 1, 2, 3의 유효한 답이 아니다. 이유는 길이가 최소가 아니기 때문뿐이다. 1)(과 )(1은 샘플 4의 유효한 답이 아니다. 짝이 맞지 않는 괄호가 있고, 1이 있는 위치에서 중첩 깊이가 0이기 때문이다.

예제1

  1. 예제 1

    입력
    4
    0000
    101
    111000
    1
    
    예상 출력
    Case #1: 0000
    Case #2: (1)0(1)
    Case #3: (111)000
    Case #4: (1)