두 큐를 입력받고 큐에서 숫자들을 옮겨가며 두 큐에 들어있는 숫자가 같게 만드는데 최소 몇 번의 연산이 필요한지 구하는 문제입니다. 연산의 횟수를 구할 때 숫자를 옮기는 과정(한쪽 큐에서 pop하는 단계+pop한 숫자를 다른 쪽 큐에 append하는 단계)를 합쳐 한 번으로 계산합니다. 만약 두 큐의 값이 같아질 수 없으면 -1을 출력합니다.
from collections import deque
def solution(queue1, queue2):
answer = 0
q1=deque()
q2=deque()
for i in queue1:
q1.append(i)
for i in queue2:
q2.append(i)
lenQueue = len(queue1)*2
sum1 = sum(queue1)
sum2 = sum(queue2)
calc1 = 0
calc2 = 0
if (sum1+sum2)%2 == 1:
return -1
while True:
if sum1==sum2:
return answer
answer += 1
if sum1>sum2:
calc1 += 1
num = q1.popleft()
sum1 -= num
sum2 += num
q2.append(num)
else:
calc2 += 1
num = q2.popleft()
sum1 += num
sum2 -= num
q1.append(num)
if calc1 > lenQueue or calc2 > lenQueue:
return -1