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

파이썬에서 충돌 후 로켓의 최종 상태를 찾는 프로그램

<시간/>

nums라고 하는 숫자 목록이 있고 로켓의 크기와 방향을 나타내는 목록이 있다고 가정합니다. 양의 정수는 오른쪽을 나타내고 음수는 왼쪽을 나타냅니다. 그리고 숫자의 절대값은 로켓의 크기를 나타냅니다. 이제 두 개의 로켓이 충돌할 때 작은 로켓은 파괴되고 큰 로켓은 변경되지 않고 계속 여행을 계속합니다. 같은 크기의 로켓이 충돌하면 둘 다 파괴됩니다. 두 로켓이 같은 방향으로 움직이면 충돌하지 않습니다(로켓 속도가 같다고 가정). 모든 충돌 후에 로켓의 상태를 찾아야 합니다.

따라서 입력이 nums =[3, 8, 5, -5]와 같으면 출력은 [3, 8]이 되며 5와 -5는 파괴되고 나머지는 살아남습니다.

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

  • ls :=하나의 요소가 있는 새 목록 nums[0]
  • 범위 1에서 숫자 크기 - 1까지의 i에 대해
    • 숫자[i]>=0이면
      • ls 끝에 숫자[i] 삽입
    • 그렇지 않으면
      • ls 끝에 숫자[i] 삽입
      • j :=ls - 2의 크기
      • j>=0이고 ls[j]>=0인 동안 do
        • if |ls의 마지막 요소|> ls[j], 다음
          • ls에서 j번째 요소 삭제
        • 그렇지 않으면 |ls|의 마지막 요소가 ls[j]와 같으면
          • ls에서 j번째 요소 삭제
          • ls에서 마지막 요소 삭제
          • 루프에서 나오다
        • 그렇지 않으면
          • ls에서 마지막 요소 삭제
          • 루프에서 나오다
        • j :=j - 1
  • ls를 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

class Solution:
   def solve(self, nums):
      ls = [nums[0]]
      for i in range(1, len(nums)):
         if nums[i] >= 0:
            ls.append(nums[i])
         else:
            ls.append(nums[i])
            j = len(ls) - 2
            while j >= 0 and ls[j] >= 0:
               if abs(ls[-1]) > ls[j]:
                  ls.pop(j)
               elif abs(ls[-1]) == ls[j]:
                  ls.pop(j)
                  ls.pop(-1)
                  break
               else:
                  ls.pop(-1)
                  break
               j -= 1
      return ls

ob = Solution()
nums = [3, 8, 5, -5]
print(ob.solve(nums))

입력

[3, 8, 5, -5]

출력

[3, 8]