문제
문제링크
코드
실패한 코드
from collections import deque
def solution(queue1, queue2):
answer = 0
q1 = deque(queue1)
q2 = deque(queue2)
length = (len(q1) + len(q2))
while sum(q1) != sum(q2):
s1, s2 = sum(q1), sum(q2)
if answer > length:
return -1
elif s1 > s2:
cell = q1.popleft()
q2.append(cell)
answer += 1
elif s1 < s2:
cell = q2.popleft()
q1.append(cell)
answer += 1
return answer
성공한 코드
from collections import deque
def solution(queue1, queue2):
answer = 0
q1 = deque(queue1)
q2 = deque(queue2)
length = (len(q1) + len(q2)) * 2
s1, s2 = sum(q1), sum(q2)
while s1 != s2:
if answer > length:
return -1
elif s1 > s2:
cell = q1.popleft()
q2.append(cell)
answer += 1
s1 -= cell
s2 += cell
elif s1 < s2:
cell = q2.popleft()
q1.append(cell)
answer += 1
s1 += cell
s2 -= cell
return answer
분석
- 문제 해결 논리
이것은 맞게 풀었다. 그러나 시간 초과가 발생했다. 근데 한 가지 빠트린 것은 반복문 탈출 조건이었다. 완전 변형을 하고 다시 원래의 모습을 되찾기까지 걸리는 연산 횟수를 탈출 조건으로 주어야 했다. 이것은 암기해두자.
- 시간 초과 발생
알고리즘은 대충 맞았으나 시간 초과가 발생했다.
단순하게 연산 횟수를 줄이는 것만으로 문제가 풀려버렸다.
연산 횟수를 최대한 줄여야 한다!!