각 큐의 합을 비교하면서 큰 큐에서는 빼서 작은 큐에 값을 넣어준다.
여기서 각 큐의 합은 sum 함수가 아닌 처음에 구해놓은 값에서 빼거나 더할때마다 사칙연산 해주는 식으로 해야 시간초과가 뜨지 않는다.
반복문을 멈추는 조건은 각 큐 중 가장 길이가 긴 값에 서로의 큐를 더한 값이다.
from collections import deque
def solution(queue1, queue2):
result = 0
sum_q1, sum_q2 = sum(queue1), sum(queue2)
queue1 = deque(queue1)
queue2 = deque(queue2)
max_num = max(len(queue1), len(queue2)) + len(queue1) + len(queue2)
if (sum_q1 + sum_q2) % 2 == 1:
return -1
elif sum_q1 == sum_q2:
return 0
while True:
if result > max_num:
return -1
if sum_q1 == sum_q2:
return result
elif sum_q1 > sum_q2:
a = queue1.popleft()
sum_q1 -= a
queue2.append(a)
sum_q2 += a
else:
a = queue2.popleft()
sum_q2 -= a
queue1.append(a)
sum_q1 += a
result += 1