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

채멈·2024년 6월 10일

Algorithm

목록 보기
24/24
post-thumbnail

문제
https://school.programmers.co.kr/learn/courses/30/lessons/118667
풀이
https://github.com/nowChae/algorithm/blob/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/2/118667.%E2%80%85%EB%91%90%E2%80%85%ED%81%90%E2%80%85%ED%95%A9%E2%80%85%EA%B0%99%EA%B2%8C%E2%80%85%EB%A7%8C%EB%93%A4%EA%B8%B0/%EB%91%90%E2%80%85%ED%81%90%E2%80%85%ED%95%A9%E2%80%85%EA%B0%99%EA%B2%8C%E2%80%85%EB%A7%8C%EB%93%A4%EA%B8%B0.py

처음엔 단순히 두 큐의 합을 비교해서 큰 합을 가진 큐에서 pop하고, 다른 쪽에 insert를 반복해가면서 합이 같아지는 때를 찾도록 구현하였다. while 문으로 반복하다보니 두 큐의 합을 같게 만들지 못하는 경우에 조건을 넣어 break 하도록 구현하였지만 append와 pop 때문인지 시간 초과가 발생하였다.

append와 pop을 사용하지않고 어떻게 구현할 수 있을 지 생각해보다가 두 큐를 합해 하나의 배열로 만들고, 포인터를 옮겨가면서 더하거나 빼면 시간을 줄일 수 있을 것이라는 생각이 들었다.

< 풀이 코드 >

def solution(queue1, queue2):
    start = 0
    end = len(queue1) - 1
    total_sum = sum(queue1) + sum(queue2)
    half = total_sum / 2
    total_list = []
    
    sum_result = 0
    
    if sum(queue1) > sum(queue2):
        total_list = queue1 + queue2 + queue1
        sum_result = sum(queue1)
    else:
        total_list = queue2 + queue1 + queue2
        sum_result = sum(queue2)
    
    result = 0
    state = False
    for i in range(len(total_list) - 1):
        if sum_result == half:
            state = True
            return result
        if sum_result > half:
            sum_result -= total_list[start]
            start += 1
            result += 1
        elif sum_result < half:
            end += 1
            sum_result += total_list[end]
            result += 1
    if not state:
        result = -1
    return result
profile
공부 기록 차곡차곡 ( ੭ ・ᴗ・ )੭

0개의 댓글