주문이라는 문자열 목록이 있다고 가정합니다. 주문 목록의 각 요소는 "P" 또는 "D"로 시작합니다. "P"는 픽업됨을 나타내고 "D"는 "배달"을 의미합니다. 그리고 이 문자 뒤에 주문 ID 번호가 옵니다. 예를 들어, "P6"은 픽업 주문 6을 나타냅니다. 이 규칙에 따라 주문 목록이 유효한지 여부를 확인해야 합니다. −
- 픽업 전에 주문을 배송할 수 없습니다.
- 모든 픽업은 반드시 배송되어야 합니다
- 이미 픽업되어 배송된 주문은 다시 픽업하거나 배송할 수 없습니다.
따라서 입력이 order =["P1", "D1", "P2", "P3", "D3", "D2"]와 같으면 첫 번째 주문이 픽업 후 배달되기 때문에 출력은 True입니다. , 그리고 두 번째 및 세 번째 주문의 경우 한 번에 픽업되어 마지막으로 배달됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- a :=새 지도
- 주문에 중복 항목이 있는 경우
- 거짓을 반환
- 주문의 각 i에 대해 다음을 수행합니다.
- 내가 "P"로 시작하면
- a[픽업 주문 번호] =1
- 그렇지 않으면 내가 "D"로 시작하면
- 주문 번호가 에 없으면
- 거짓을 반환
- 그렇지 않으면
- a[배송 주문 번호] 1 감소
- 주문 번호가 에 없으면
- 내가 "P"로 시작하면
- 의 모든 값 목록에 있는 모든 요소의 합이 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