배경
내 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구체적으로?