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

나열된 모든 배달 작업이 Python에서 유효한지 여부를 확인하는 프로그램

<시간/>

주문이라는 문자열 목록이 있다고 가정합니다. 주문 목록의 각 요소는 "P" 또는 "D"로 시작합니다. "P"는 픽업됨을 나타내고 "D"는 "배달"을 의미합니다. 그리고 이 문자 뒤에 주문 ID 번호가 옵니다. 예를 들어, "P6"은 픽업 주문 6을 나타냅니다. 이 규칙에 따라 주문 목록이 유효한지 여부를 확인해야 합니다. −

  • 픽업 전에 주문을 배송할 수 없습니다.
  • 모든 픽업은 반드시 배송되어야 합니다
  • 이미 픽업되어 배송된 주문은 다시 픽업하거나 배송할 수 없습니다.

따라서 입력이 order =["P1", "D1", "P2", "P3", "D3", "D2"]와 같으면 첫 번째 주문이 픽업 후 배달되기 때문에 출력은 True입니다. , 그리고 두 번째 및 세 번째 주문의 경우 한 번에 픽업되어 마지막으로 배달됩니다.

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

  • a :=새 지도
  • 주문에 중복 항목이 있는 경우
    • 거짓을 반환
  • 주문의 각 i에 대해 다음을 수행합니다.
    • 내가 "P"로 시작하면
      • a[픽업 주문 번호] =1
    • 그렇지 않으면 내가 "D"로 시작하면
      • 주문 번호가 에 없으면
        • 거짓을 반환
      • 그렇지 않으면
        • a[배송 주문 번호] 1 감소
  • 의 모든 값 목록에 있는 모든 요소의 합이 0과 같으면 true를 반환하고, 그렇지 않으면 false를 반환

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

def solve(orders):
   a = {}
   if len(set(orders)) != len(orders):
      return False
   for i in orders:
      if i[0] == "P":
         a[i[1:]] = 1
      elif i[0] == "D":
         if i[1:] not in a:
            return False
         else:
            a[i[1:]] -= 1
   return sum(a.values()) == 0

orders = ["P1", "D1", "P2", "P3", "D3", "D2"]
print(solve(orders))

입력

["P1", "D1", "P2", "P3", "D3", "D2"]

출력

True