[프로그래머스] 두 큐 합 같게 만들기 - 파이썬

JinUk Lee·2023년 1월 3일
0

프로그래머스

목록 보기
8/47

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번이 이 경우인거같다)

profile
개발자 지망생

0개의 댓글