Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 오름차순으로 표시될 수 있도록 카드를 배열하는 프로그램

<시간/>

카드 목록이 있고 카드가 오름차순으로 표시되도록 순서를 지정하려고 한다고 가정합니다. 우리가 알다시피, 카드는 다음과 같은 방식으로 공개됩니다. 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]