Informatica Online Judge

  괄호 순열 [0461 / 01CD]

Time Limit(Test case) : 1000(ms)
Number of users who solved : 17   Total Tried : 189


The Champion of this Problem (C++) : jun6873 - 0ms / 753byte
My Best Submission (C++) : N/A

[]

Background

괄호순열은 [와 ]로 이루어 진 순열 중 [와 ]의 개수가 같고,왼쪽에서 어떤 n번째 괄호에서 왼쪽의 [와 ] 개수를 세어도 [의 개수가 ]의 개수 이상인 순열을 말한다. 즉, [[][]]나 [[]]와 같은 순열이다.
이 때, 괄호순열의 각 여는 괄호([)는 닫는 괄호(])와 하나씩 대응된다.(대응하는 방법은 일반적으로 괄호를 열고 닫는 방법이다. 즉, [[][]]에서는 2,3번째괄호, 4,5번째괄호, 1,6번째 괄호가 서로 대응된다.)
대응되는 괄호의 중간지점은 어떤 두 괄호의 사이가 되는데, 이때 각각의 대응되는 괄호들의 중간지점으로부터 왼쪽에 있는 괄호들의 개수를 오름차순으로 배열한 것을 "중간코드"라고 한다. 예를 들어 [[][]]의 중간코드는 2 3 4이고, [[]]의 중간코드는 2 2이다.
이제 중간코드의 길이 n과 중간코드가 주어질 때, 처음 주어진 괄호순열을 복원하여라.

Input

중간코드의 길이 n이 입력되고, 그 다음줄에 중간코드가 입력된다.
단, 테스트케이스는 다음과 같이 구성된다.
40% : n≤10
60% : n≤1000

Output

주어진 중간코드를 갖는 괄호 순열을 출력한다.

IO Example

입력1
1
1

출력1
[]

입력2
2
1 3

출력2
[][]

입력3
2
2 2

출력3
[[]]

입력4
3
2 3 4

출력4
[[][]]

출제 : 한민기(서울대 수학과)

Submit : [C/C++] | [C++11] | [Obj-C] | [Java] | [Python]
Prob Analysis : [Problem Statistics] | [Solution]