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