괄호 문자열 나열
면접 대비시간 제한2초메모리 제한512 MB
N과 M이 주어질 때, '('가 ')'보다 작다는 사전순으로 길이 N인 올바른 괄호 문자열 중 M번째를 출력한다.
문제
올바른 괄호 문자열은 문자 (와 )로만 이루어진 문자열 중에서, 여는 괄호마다 짝이 되는 닫는 괄호가 있고 닫는 괄호마다 짝이 되는 여는 괄호가 있는 문자열이다. 예를 들어 (())()는 올바른 괄호 문자열이지만, (())(()와 ())(()는 아니다.
길이가 같은 두 괄호 문자열 와 가 다음 두 조건을 모두 만족하면 가 보다 사전순으로 작다고 하고 로 쓴다.
- 와 가 적어도 한 자리에서 다르다.
- 와 가 처음으로 달라지는 가장 왼쪽 자리에서 는
(이고 는)이다.
예를 들어 이다. 두 문자열은 왼쪽에서 두 번째 자리에서 처음 달라지는데, 앞 문자열은 그 자리가 (이고 뒤 문자열은 )이기 때문이다.
길이 을 고정하면 관계가 길이 인 올바른 괄호 문자열 전체의 순서를 정한다. 일 때 순서는 다음과 같다.
((()))(()())(())()()(())()()()
과 양의 정수 이 주어질 때, 이 순서에서 번째 올바른 괄호 문자열을 구하라.
입력
첫째 줄에 짝수 ()과 양의 정수 이 공백을 사이에 두고 주어진다. 은 이하이고, 길이 인 올바른 괄호 문자열의 개수 이하이다.
출력
위에서 정의한 순서로 번째인 길이 의 올바른 괄호 문자열을 출력한다.