본문 바로가기

알고리즘

프로그래머스)두 큐 합 같게 만들기-pyhton

https://school.programmers.co.kr/learn/courses/30/lessons/118667

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1차원적으로 보자면 매우 간단한 문제이다.

큐1과 큐2가 같게 만들 떄까지 큰 것에서 작은 것으로 pop,left를 반복해주면 된다.

예를들어 큐1의 합이 15, 큐2의 합이 16이라면 큐2에서 popleft, queue1.append()를하면 된다.

다만 어디까지 for문 또는 while문을 돌려야하나 그것이 문제였다.

대충 찍으면 답이 나올 것 같지만 정확한 이해가 필요했기에 검색을 했다.

(사실 큰 것에서 작은 것으로 popleft append는 생각 했었지만 예시 1번이 작은 것에서 큰 것으로 popleft append로 설명 되어 있어서 햇갈려 검색한 것도 있다.)

 

https://www.youtube.com/watch?v=rntT16XgqRc 

유튜브에 간단한 검색만으로 쉽게 이해할 수 있었다.

투포인터를 활용해 max값을 쉽게 알 수 있었다.

from collections import deque

def solution(queue1, queue2):
    q1 = deque(queue1)
    q2 = deque(queue2)
    sum1 = sum(q1)
    sum2 = sum(q2)
    lengh = len(queue1) + len(queue2)
    answer = -1
    for i in range(0,lengh * 2):
        if sum1 == sum2:
            answer = i
            break
        elif sum1 > sum2:
            item = q1.popleft()
            sum1 -= item
            q2.append(item)
            sum2 += item
            
        else:
            item = q2.popleft()
            q1.append(item)
            sum1 += item
            sum2 -= item
            
    
    
    return answer