본문 바로가기
프로그래머스

[프로그래머스] 2022 KAKAO TECH INTERNSHIP 두 큐 합 같게 만들기 - Python

by whereisco 2023. 5. 30.

문제

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

 

프로그래머스

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

programmers.co.kr

위 문제는 두 큐의 원소 합을 같게 만들기 위해 필요한 작업의 최소 횟수를 리턴해야 하는 문제 입니다. 두 큐의 원소 합이 같다는 것은 각 큐의 합이 (두 큐의 모든 원소의 합 / 2)와 같다는 것을 의미합니다. 따라서 이를 타겟값으로 설정합니다. 초기 상태에 타겟값보다 큰 원소합을 가진 큐를 기준으로 pop()과 append()를 진행하며 각 큐의 원소합을 새롭게 갱신해줍니다. 이 후, 큐가 비게 되면 각 큐의 원소합을 같게 만들 수 없는 경우이므로 -1이 반환되도록 하고, 연산 횟수를 세며 타겟값과 큐의 원소합이 같아지면 탈출하도록 하여 문제를 해결하였습니다.

Python

from collections import deque
def solution(queue1, queue2):
    answer = 0
    sum_q1 = sum_q2 = 0
    
    for i in queue1:
        sum_q1+=i
    for i in queue2:
        sum_q2+=i
    
    target = (sum_q1 + sum_q2) // 2
    
    queue1 = deque(queue1)
    queue2 = deque(queue2)
    
    while sum_q1 != target:
        if not queue1 or not queue2:
            return -1 
        
        if sum_q1 > target:
            tmp = queue1.popleft()
            sum_q1 -= tmp
            sum_q2+=tmp
            answer += 1            
        
        else: #target > sum_q1이라는 것은 queue2에 더 큰 원소합을 가지고 있다는 것으로 판단
            tmp = queue2.popleft() 
            queue1.append(tmp)
            sum_q2 -= tmp
            sum_q1 += tmp
            answer +=1
    return answer