[프로그래머스] 두 큐 합 같게 만들기

최동혁·2022년 12월 11일
0

프로그래머스

목록 보기
25/68

풀이 방법

각 큐의 합을 비교하면서 큰 큐에서는 빼서 작은 큐에 값을 넣어준다.
여기서 각 큐의 합은 sum 함수가 아닌 처음에 구해놓은 값에서 빼거나 더할때마다 사칙연산 해주는 식으로 해야 시간초과가 뜨지 않는다.
반복문을 멈추는 조건은 각 큐 중 가장 길이가 긴 값에 서로의 큐를 더한 값이다.

멈추는 조건 max 값

  • 모든 경우의 수를 파악하기 위해 최악의 경우 가장 긴 큐에서 짧은 큐 뒤에 전부 옮긴다.
  • 짧은 큐는 다시 긴 큐가 있던 큐로 옮기게 된다.
  • 그렇다면 여기까지는 len(queue1) + len(queue2)이다.
  • 처음에 긴큐에서 짧은큐로 옮겼으니, 다시 현재 길어진 큐에서 짧은 큐로 옮긴다.
  • 이렇게 되면 모든 경우의 수를 본 것이다.
  • 그래서 max값으로 가장 긴 큐의 길이와 전체 길이를 더해주었다.

풀이 코드

from collections import deque
def solution(queue1, queue2):
    result = 0
    sum_q1, sum_q2 = sum(queue1), sum(queue2)
    
    queue1 = deque(queue1)
    queue2 = deque(queue2)
    
    max_num = max(len(queue1), len(queue2)) + len(queue1) + len(queue2)
    
    if (sum_q1 + sum_q2) % 2 == 1:
        return -1
    
    elif sum_q1 == sum_q2:
        return 0
    
    while True:
        if result > max_num:
            return -1
        
        if sum_q1 == sum_q2:
            return result
        
        elif sum_q1 > sum_q2:
            a = queue1.popleft()
            sum_q1 -= a
            
            queue2.append(a)
            sum_q2 += a
            
        else:
            a = queue2.popleft()
            sum_q2 -= a
            
            queue1.append(a)
            sum_q1 += a
        
        result += 1
profile
항상 성장하는 개발자 최동혁입니다.

0개의 댓글