두 큐 합 같게 만들기

최민수·2023년 3월 13일
0

알고리즘

목록 보기
35/94
from collections import deque

⭐️
def solution(queue1, queue2):
    queue1, queue2 = deque(queue1), deque(queue2)
    sum1, sum2 = sum(queue1), sum(queue2)
    maxSize = (len(queue1) + len(queue2)) * 2
    
    cnt1, cnt2 = 0, 0
    total = sum1 + sum2
    
    if total % 2 == 1: # 홀수면 목표 달성X
        return -1
    
    while(sum1 != sum2):
        if sum1 > sum2:
            item = queue1.popleft()
            queue2.append(item)
            sum1 -= item
            sum2 += item
            cnt1 += 1
        elif sum1 < sum2:
            item = queue2.popleft()
            queue1.append(item)
            sum2 -= item
            sum1 += item
            cnt2 += 1
        
        if cnt1 > maxSize or cnt2 > maxSize:
            return -1
    
    return cnt1 + cnt2
  • 처음 풀 때 로직과 코드는 잘 짰다. 그러나 계속 3-4개의 테스트 케이스에서 시간 초과가 났다.
    반복문 탈출 조건에 문제가 없는 것 같은데, 참 희한했다.

  • 그 답은 pop(0)에서 찾을 수 있었다.
    list의 pop(0) 보다 deque로 전환하더라도 popleft() 를 호출하는게 시간적인 측면에서 비교도 할 수 없을 만큼 빨랐다.

  • 앞으로 문제 풀이에 있어 list의 pop 보다는 무조건 deque의 pop 을 쓰도록 하자.

프로그래머스 연습 문제, https://school.programmers.co.kr/learn/challenges

profile
CS, 개발 공부기록 🌱

0개의 댓글