균형 잡힌 문자열은 ()
모든 괄호를 다른 괄호와 일치시킬 수 있도록 괄호 문자열입니다 . 더 엄격하게 그들은이 문법에 의해 퍼져있는 줄입니다 :
S → (S)S | ε
다음과 같이 문자열을 "내부"로 바꿀 수 있습니다.
모든 항목 전환
(
과)
서로를줄이 다시 균형을 잡을 때까지 줄 앞에서 뒤로 문자 이동.
예를 들어 봅시다.
균형 잡힌 문자열로 시작합니다.
(()(())())
그런 다음 파 렌스를 전환하여
))())(()((
그런 다음 문자열이 균형을 잡을 때까지 문자열 앞쪽에서 문자열 뒤쪽으로 문자를 이동하십시오.
))())(()((
)())(()(()
())(()(())
))(()(())(
)(()(())()
(()(())())
그게 우리의 결과입니다!
일부 문자열은 문자열과 같이 여러 가지 방법으로 뒤집어 질 수 있습니다.
(()())
뒤집어 놓으면 다음 중 하나 일 수 있습니다.
()(())
또는
(())()
그러나 모든 문자열 에는 하나 이상의 솔루션이 있습니다.
태스크
균형 잡힌 문자열을 입력으로 사용하고 그 문자열을 뒤집어 출력하는 프로그램을 작성하십시오. 유효한 출력이 여러 개인 경우 그 중 하나만 출력하면됩니다. 당신은 다른 브레이스 유형을 사용 (수 <>
, []
또는 {}
당신이 그렇게 원하는 경우).
이것은 코드 골프 경쟁이므로 바이트 단위로 측정 할 때 소스 코드의 크기를 최소화해야합니다.
테스트 사례
(()()) -> ()(()), (())()
(()(())()) -> (()(())())
((())())() -> (()(()()))