문제 링크

풀이 과정

전체 코드

from collections import deque

def solution(queue1, queue2):
    '''
    1. 각 큐의 합을 같게 만들어야 함 -> 두 큐에 속한 모든 원소의 합이 짝수여야 함.
       -> 홀수인 경우, -1 반환
    2. 한쪽 큐에 속한 원소의 최댓값이 목표 합보다 큰 경우, -1을 반환 
    3. 두 큐의 합이 같지 않은 경우에는, 반드시 어느 한 큐의 합이 다른 한 큐의 합보다 클 수 밖에 없다.
       -> sum(queue1) > sum(queue2) 또는 sum(queue1) < sum(queue2) 
       -> 두 큐의 합을 같게 만드려면, 원소의 합이 더 큰 큐에서 원소를 추출해야 함
    '''
    answer = 0
    sum_queue1, sum_queue2 = sum(queue1), sum(queue2)
    
    if (sum_queue1 + sum_queue2) % 2 == 1:  return -1
    total_queue = queue1 + queue2
    left, right = 0, len(queue1)
    total_len = len(total_queue)
    
    while (left < total_len) and (right < total_len):
        if sum_queue1 < sum_queue2:
            sum_queue1 += total_queue[right]
            sum_queue2 -= total_queue[right]
            right += 1
            answer += 1
        elif sum_queue1 > sum_queue2:
            sum_queue1 -= total_queue[left]
            sum_queue2 += total_queue[left]
            left += 1
            answer += 1
        if sum_queue1 == sum_queue2:    return answer
    
    return -1