배경
내 4 살짜리가 그의 랍비에서 얻은 게임을 바탕으로
"목표"는 주어진 순서대로 글자를 "찾는"것입니다 (예 :) aecdb
. 예를 들어 레터 카드 묶음이 제공 daceb
됩니다. 주기적으로하더라도 주어진 순서로만 스택을 검색 할 수 있습니다. 필요한 편지를 만나면 스택에서 꺼내십시오.
객관적인
순서와 스택 (서로 중복없는 순열)이 주어지면 게임을하는 동안 볼 수있는 최상위 스택 문자 (모두 인쇄 가능한 ASCII 임)의 시퀀스를 찾으십시오.
단계별 예
aecdb
스택이 주어지면 순서를 찾아야합니다 daceb
.
스택 맨 위 d
: 우리가 찾고있는 것이 아니므로 ( a
)를 시퀀스에 추가 d
하고 스택 :을 얻기 위해 회전하십시오 acebd
.
스택 맨 위 a
: 예! 시퀀스에 추가 da
하고 스택에서 제거합니다 cebd
.
스택 맨 위 c
: 우리가 찾고있는 것이 아니므로 ( e
)를 시퀀스에 추가 dac
하고 스택 :을 얻기 위해 회전하십시오 ebdc
.
스택 맨 위 e
: 예! 시퀀스에 추가 dace
하고 스택에서 제거합니다 bdc
.
스택 맨 위 b
: 우리가 찾고있는 것이 아니므로 ( c
)를 시퀀스에 추가 daceb
하고 스택 :을 얻기 위해 회전하십시오 dcb
.
스택 맨 위 d
: 우리가 찾고있는 것이 아니므로 ( c
)를 시퀀스에 추가 dacebd
하고 스택 :을 얻기 위해 회전하십시오 cbd
.
스택 맨 위 c
: 예! 시퀀스에 추가 dacebdc
하고 스택에서 제거합니다 bd
.
스택 맨 위 b
: 우리가 찾고있는 것이 아니므로 ( d
)를 시퀀스에 추가 dacebdcb
하고 스택 :을 얻기 위해 회전하십시오 db
.
스택 맨 위 d
: 예! 시퀀스에 추가 dacebdcbd
하고 스택에서 제거합니다 b
.
스택 맨 위 b
: 예! 시퀀스에 추가 dacebdcbdb
하고 스택에서 제거합니다 .
그리고 우리는 끝났습니다. 결과는 dacebdcbdb
입니다.
참조 구현
def letters(target, stack):
string = ''
while stack:
string += stack[0]
if stack[0] == target[0]:
stack.pop(0)
target = target[1:]
else:
stack.append(stack.pop(0))
return string
print letters('aecdb', list('daceb'))
테스트 사례
try
, yrt
→yrtyry
1234
, 4321
→4321432434
ABCDEFGHIJKLMNOPQRSTUVWXYZ
, RUAHYKCLQZXEMPBWGDIOTVJNSF
→RUAHYKCLQZXEMPBWGDIOTVJNSFRUHYKCLQZXEMPWGDIOTVJNSFRUHYKLQZXEMPWGIOTVJNSFRUHYKLQZXMPWGIOTVJNSRUHYKLQZXMPWIOTVJNSRUYKLQZXMPWOTVNSRUYQZXPWOTVSRUYQZXPWTVSRUYQZXWTVSRUYZXWTVSUYZXWTVUYZXWVYZXWYZXYZ
?
, ?
→?
a
, a
→a a
abcd
, abcd
→abcd
99
구체적으로?