애비뉴를보고 있는데 누군가 쓰레기를 버렸습니다! 휴지통을 휴지통에 넣어 문제를 해결하는 데 도움이되는 프로그램을 작성해야합니다.
작업
애비뉴는 인쇄 가능한 ASCII 문자로 구성됩니다. 예 :
[[](dust)[]] car ((paper)vomit) (broken(glass)) [[] (rotten) fence (dirty)
여기서 일부 괄호는 일치하지 않습니다. 그것들은 단지 미끼입니다. 우리가 신경 쓰는 것은 일치하는 대괄호 세트입니다.
휴지통은 로 시작하는 문자열 [
과로 끝나는 ]
, 내부적으로 일치하는 괄호와 괄호. 예를 들어, []
그리고 [[](dust)[]]
위의 문자열에 쓰레기통입니다.
쓰레기 봉투가 로 시작하는 문자열 (
과로 끝나는 )
, 내부적으로 일치하는 괄호와 괄호. 예를 들어, (dust)
위 문자열의 쓰레기 봉투입니다.
일부 쓰레기 봉투는 이미 쓰레기통에있을 수 있습니다. 그러나 적어도 하나는 빠졌을 것입니다. 쓰레기 봉투가 모두 쓰레기통 안에 있도록 쓰레기 봉투를 옮겨야합니다. 구체적으로, 현재 쓰레기통 안에 있지 않은 각 쓰레기 봉투 (즉, 쓰레기통의 하위 문자열)에 대해 현의 현재 위치에서 쓰레기통을 꺼내 쓰레기통 안에있는 장소에 삽입해야합니다. .
여기에 추가 규칙이 있습니다. 우리는 가비지 수집기에 너무 많은 돈을 쓰지 않기를 원하고 경로가 길을 따라 오른쪽에서 왼쪽으로 이동 하기 때문에 각 쓰레기 봉지 를 왼쪽 으로 옮기고 싶습니다 (가장 중요한 기준은 모두) 및 가장 짧은 거리 (왼쪽으로 이동하는 한). 예를 들어
[can1](bag)[can2]
이다
[can1(bag)][can2]
(가방을 왼쪽으로 한 문자 만 이동). 또한 가방은 동일한 상대 순서로 유지되어야합니다.
[can](bag1)(bag2)
되어야한다
[can(bag1)(bag2)]
(즉 (bag2)
, 왼쪽에 넣을 수 없습니다 (bag1)
.)
설명
- 가장 왼쪽에있는 휴지통의 왼쪽에는 휴지통이 없습니다. 휴지통을 왼쪽으로 이동하면 항상 모든 쓰레기를 버릴 수 있습니다.
- 움직일 가방은 항상 하나 이상 있어야합니다. 둘 이상이있을 수 있습니다.
- 쓰레기 봉투 안에는 쓰레기통이 절대 없을 것입니다 (깡통은 버릴 수 없을만큼 가치가 있습니다).
- 가방이 이미 캔 안에 있다면 그냥 내버려 두십시오.
- 입력 및 출력이 후행 공백 (개행 포함)이 다른 것이 좋습니다.
예 :
입력:
[[](dust)[]] car ((paper)vomit) (broken(glass)) [[] (rotten) fence (dirty)
산출:
[[](dust)[]((paper)vomit)(broken(glass))] car [[(rotten)(dirty)] fence
입력:
[]] (unusable) door (filthy) car
출력 :
[(unusable)(filthy)]] door car