[알고리즘] 두 큐 합 같게 만들기

sith-call.dev·2023년 7월 7일
0

알고리즘

목록 보기
29/47

문제

문제링크

코드

실패한 코드

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

분석

  1. 문제 해결 논리
    이것은 맞게 풀었다. 그러나 시간 초과가 발생했다. 근데 한 가지 빠트린 것은 반복문 탈출 조건이었다. 완전 변형을 하고 다시 원래의 모습을 되찾기까지 걸리는 연산 횟수를 탈출 조건으로 주어야 했다. 이것은 암기해두자.
  2. 시간 초과 발생
    알고리즘은 대충 맞았으나 시간 초과가 발생했다.
    단순하게 연산 횟수를 줄이는 것만으로 문제가 풀려버렸다.
    연산 횟수를 최대한 줄여야 한다!!
profile
lim (time → ∞) Life(time) = LOVE

0개의 댓글

관련 채용 정보