두 큐 합 같게 하기

발자·2022년 12월 4일
0

programmers

목록 보기
15/34
from collections import deque

def solution(queue1, queue2):
    answer = 0
    deque1 = deque(queue1)
    deque2 = deque(queue2)
    queue_len = len(deque1) * 2
    sum1 = sum(deque1)
    sum2 = sum(deque2)
    queue_sum = (sum1 + sum2) / 2
    # 홀수일 경우
    if (sum1 + sum2) % 2 == 1:
        return -1
    # 두 큐에 담긴 원소의 합이 같아질 때까지 & 두 큐의 길이를 넘지 않을만큼만 반복
    while sum1 != queue_sum and answer < 600000:
        # 큐1에 담긴 원소의 합이 더 클 때
        if sum1 > queue_sum:
            tmp = deque1.popleft()
            deque2.append(tmp)
            sum1 -= tmp
            sum2 += tmp
        # 큐2에 담긴 원소의 합이 더 클 때
        else:
            tmp = deque2.popleft()
            deque1.append(tmp)
            sum1 += tmp
            sum2 -= tmp
        answer += 1
    
    # 두 큐의 원소 합을 같게 만들 수 없는 경우
    if answer == 600000:
        answer = -1
    return answer

🧩 list보다 deque를 사용하고,
sum을 계속 반복하여 계산하기보다 tmp를 사용하여 +, - 해주어
시간을 줄일 수 있다.

0개의 댓글