카드 목록이 있고 카드가 오름차순으로 표시되도록 순서를 지정하려고 한다고 가정합니다. 우리가 알다시피, 카드는 다음과 같은 방식으로 공개됩니다. 1. 가장 맨 위에 있는 카드가 제거되고 공개되고 다음 카드가 뒤로 갑니다. 2. 더 이상 카드가 없을 때까지 1단계를 반복합니다. 오름차순으로 표시되도록 카드의 순서를 찾아야 합니다.
따라서 입력이 카드 =[1, 2, 3, 4, 5, 6, 7, 8]과 같으면 출력은 [1, 5, 2, 7, 3, 6, 4, 8]이 됩니다. 1이 제거되고 5가 뒤로 이동하므로 현재 상황[2, 7, 3, 6, 4, 8, 5]입니다. 2가 제거되고 7이 뒤로 이동, 현재 상황 [3, 6, 4, 8, 5, 7] 3이 제거되고 6이 뒤로 이동, 현재 상황 [4, 8, 5, 7, 6] 4가 제거되고 8이 뒤로 이동되고 현재 상황[5, 7, 6, 8] 5가 제거되고 7이 뒤로 이동되며, 현재 상황[6, 8, 7]입니다. 6은 제거되고 8은 뒤로 이동, 현재 상황[7, 8]. 7이 제거되고 하나의 카드만 있습니다[8]. 그런 다음 제거 [8]
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 목록 카드 정렬
- idx:=0부터 카드 길이까지의 요소가 있는 목록
- 주문:=새 목록
- q:=idx의 큐 및 삽입 요소
- q가 0이 아닌 동안 do
- q 왼쪽에서 요소를 삭제하고 순서대로 삽입
- q가 0이 아니면
- ans:=크기 카드 목록을 만들고 0으로 채우기
- 주문의 각 요소 i와 카드의 카드에 대해 다음을 수행합니다.
- ans[i]:=카드
- 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
from collections import deque class Solution: def solve(self, cards): cards.sort() idx=[i for i in range(len(cards))] order=[] q=deque(idx) while q: order.append(q.popleft()) if q: q.append(q.popleft()) ans=[0 for _ in cards] for i,card in zip(order,cards): ans[i]=card return ans ob = Solution() print(ob.solve([1, 2, 3, 4, 5, 6, 7, 8]))
입력
[1, 2, 3, 4, 5, 6, 7, 8]
출력
[1, 5, 2, 7, 3, 6, 4, 8]