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

큐브를 쌓을 수 있는지 여부를 확인하는 Python 프로그램

<시간/>

n개의 다른 큐브 크기를 포함하는 배열 num이 있다고 가정하고 수평으로 배치됩니다. 큐브 더미를 수직으로 만들어야 합니다. 새 큐브는 다음을 따라야 합니다 -

  • i번째 입방체가 j번째 입방체 위에 있는 경우 j번째 한 변의 길이는 i번째 한 변의 길이보다 크거나 같아야 합니다.

수직 말뚝을 만들 때 큐브는 왼쪽이나 오른쪽에서만 가져올 수 있지만 가운데에서는 가져올 수 없습니다. 쌓을 수 있는지 없는지 확인해야 합니다.

따라서 입력이 nums =[1,2,3,7,8]과 같으면 오른쪽에서 왼쪽으로 상자를 가져와 성공적으로 쌓을 수 있기 때문에 출력은 True가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • n :=숫자 크기
  • d :=nums의 요소에서 이중 종료 큐를 만듭니다.
  • 플래그 :=참
  • 이전 :=0
  • d가 비어 있지 않은 동안 do
    • 첫 번째 :=d[0]
    • 마지막 :=d[n-1]
    • prev가 0 및 (first> prev 또는 last> prev)와 같지 않으면
      • 플래그 :=거짓
      • 루프에서 나오다
    • 먼저>=마지막이면
      • prev :=d의 왼쪽 항목, d에서 삭제
    • 그렇지 않으면
      • prev :=d의 마지막 항목 및 d에서 삭제
  • 플래그가 참이면
    • 참 반환
  • 그렇지 않으면
    • 거짓을 반환

예시

더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

from collections import deque
def solve(nums):
   n = len(nums)
   d = deque(nums)
   flag = True
   prev = 0
   while d:
      first = d[0]
      last = d[-1]
      if prev != 0 and (first > prev or last > prev):
         flag = False
         break
      if first >= last:
         prev = d.popleft()
      else:
         prev = d.pop()
   if flag:
      return True
   else:
      return False

nums = [1,2,3,7,8]
print(solve(nums))

입력

[1,2,3,7,8]

출력

True