queue에서 값을 옮기는 횟수 제한을 거는 것이 중요하다
queue의 길이x3 번 만큼 값을 옮긴다면 서로의 값을 모두 교환했다는 의미이고 그러고도 합이 같아지지 않는다면 목표 달성이 불가능하다는 뜻이므로 -1를 return 한다
그리고 매 if조건마다 sum을 따로 해주면 테스트케이스에서 시간초과가 난다
sum1,sum2를 미리 구하고 조건에 따라 더하거나 빼줘야한다
왜 아냐고? 나도 알고싶지 않았다..내 코드가 잘못된 줄 흑흑
from collections import deque
def solution(queue1, queue2):
answer = 0
queue1, queue2 = deque(queue1), deque(queue2)
sum1, sum2 = sum(queue1), sum(queue2)
if sum1==sum2:
return 0
elif (sum1+sum2)%2==1:
return -1
#1,2의 값이 서로 모두 교환되고도(3*queue길이 동안) 합이 같아지지 않는다면 목표 달성 불가능
#합이 큰 쪽에서 작은 쪽으로 값을 이동시켜야 동일한 합이 나오게 만들 수 있다
for _ in range(3*len(queue1)):
if sum1 > sum2:
sum1 -= queue1[0]
sum2 += queue1[0]
queue2.append(queue1.popleft())
answer+=1
elif sum1 < sum2:
sum1 += queue2[0]
sum2 -= queue2[0]
queue1.append(queue2.popleft())
answer+=1
else:
return answer
return -1