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