https://school.programmers.co.kr/learn/courses/30/lessons/118667
from collections import deque
def solution(queue1, queue2):
answer = 0
queue1 = deque(queue1)
queue2 = deque(queue2)
k = 600000
sum_total = sum(queue1)+sum(queue2)
sum_q1 = sum(queue1)
sum_q2 = sum(queue2)
while queue1 and queue2 and k:
k-=1
if sum_total%2 == 1:
return -1
if sum_q1 > sum_q2:
t = queue1.popleft()
queue2.append(t)
answer+=1
sum_q1-=t
sum_q2+=t
elif sum_q1 < sum_q2:
t = queue2.popleft()
queue1.append(t)
answer += 1
sum_q2-=t
sum_q1+=t
else:
return answer
return -1
두 큐의 합을 비교해서 큰 쪽에서 작은쪽으로 숫자를 넘겨주다보면 언젠간 합이 같아질거라고 생각했다.
이제 예외조건만 조심하면되는데, 첫번째로 합이 홀수일 경우를 제외해주었고
두번째로는 큐 한쪽이 사라지는 경우 (문제의 입출력 예시3번 [1,1],[1,5])
마지막으로 무한반복되는 경우를 대비해서 각 큐 원소갯수의 합인 600000번을 반복횟수로 제한하였다. (테스트케이스 11,28번이 이 경우인거같다)