문제
여는 괄호 (와 는 괄호 )를 이용해서 만들어지는 문자열 중에서 올바른 괄호열이란 다음과 같이 정의 된다.
한 쌍의 괄호로만 이루어진 문자열
()는 올바른 괄호열이다.X 가 올바른 괄호열이면,X 를 괄호로 감싼(X )도 올바른 괄호열이다.X 와Y 가 올바른 괄호열이면,X 와Y 를 이어 붙인XY 도 올바른 괄호열이다.모든 올바른 괄호열은 위 세 가지 규칙을 통해서만 만들어진다.
예를 들어 (()(()))나 (())()()는 올바른 괄호열이지만, (()나 )((()()은 모두 올바른 괄호열이 아니다.
우리는 올바른 괄호열
f[()] = 1 X 가 올바른 괄호열이면,f[(X)] = 2 × f[X] X 와Y 가 올바른 괄호열이면,f[XY ] = f[X] + f[Y ]
예를 들어 몇 가지 올바른 괄호열들의 괄호값을 구해 보자.
f[()] = 1 f[(())] = 2 × f[()] = 2 × 1 = 2 f[()()] = f[()] + f[()] = 1 + 1 = 2 f[()()()] = f[()] + f[()()] = 1 + 2 = 3 f[(()())] = 2 × f[()()] = 2 × 2 = 4 f[((()))] = 2 × f[(())] = 2 × 2 = 4 f[()(())] = f[()] + f[(())] = 1 + 2 = 3 f[(()())()(())] = f[(()())] + f[()(())] = 4 + 3 = 7
두 개의 올바른 괄호열
하나의 입력에서
입력
첫 번째 줄에 테스트 케이스의 개수
이후
첫 번째 줄에
A 가 주어진다.두 번째 줄에
B 가 주어진다.
제약 조건
1 ≤ T ≤ 10 A 와B 는 올바른 괄호열이다.하나의 입력에서 주어지는 모든 테스트 케이스의
A 의 길이의 합은3\,000\,000 이하이다.하나의 입력에서 주어지는 모든 테스트 케이스의
B 의 길이의 합은3\,000\,000 이하이다.
출력
각각의 테스트 케이스마다, 한 개의 줄에,
f[A] = f[B] 이면=,f[A] < f[B] 이면<,f[A] > f[B] 이면>
을 출력한다.
부분문제
| 번호 | 점수 | 조건 |
|---|---|---|
| #1 | 3점 | |
| #2 | 23점 | |
| #3 | 13점 | 여는 괄호와 닫는 괄호의 개수가 같고 모든 닫는 괄호가 모든 여는 괄호의 뒤에 있는 괄호열을 단순 괄호열이라고 하자.
|
| #4 | 61점 | 추가 제약 조건 없음. |
예제 #1
1
(())
()()
=
예제 #2
1
()()()
(()())
<
예제 #3
2
((()))
()(())
(((())))
()()()()()
>
>
첫 번째 테스트 케이스:
두 번째 테스트 케이스: