[프로그래머스] 2022 KAKAO TECH INTERNSHIP/두 큐 합 같게 만들기/파이썬/python
Algorithm/카카오 기출

[프로그래머스] 2022 KAKAO TECH INTERNSHIP/두 큐 합 같게 만들기/파이썬/python

728x90
반응형

💡 solutions  

💬 첫 번째 풀이, deque 자료 구조 활용하여 반복문으로 두 큐의 합 같게 연산, 두 큐의 최대 길이만큼 반복했는데도 두 큐의 합을 같게 하지 못하면 -1 반환하는 조건 추가

💬 두 번째 풀이, 두 개의 큐를 하나의 큐로 합쳐서 투 포인터로 두 큐의 합이 같아지는지 확인 

 

🤖 code  

 

# 첫 번째 풀이

from collections import deque 


def solution(queue1, queue2):
    queue1, queue2 = deque(queue1), deque(queue2)
    sum1, sum2 = sum(queue1), sum(queue2)
    target_sum = (sum1 + sum2) // 2
    cnt = 0

    if max(queue1) > target_sum or max(queue2) > target_sum :
        return -1

    while sum1 != sum2:
        if sum1 > sum2:
            cur = queue1.popleft()
            sum1 -= cur
            queue2.append(cur)
            sum2 += cur
        else:
            cur = queue2.popleft()
            sum2 -= cur
            queue1.append(cur)
            sum1 += cur
        cnt += 1
        
        if cnt >= 300000 * 2:
            return -1
    return cnt

 

# 다른 풀이 참고하여 두 번째 풀이

def solution(queue1, queue2):
    sum1, sum2 = sum(queue1), sum(queue2)
    target_sum = (sum1 + sum2) // 2

    new_queue = queue1 + queue2
    new_queue_len = len(new_queue)
    start, end = 0, len(queue1) - 1
    cnt = 0
    while sum1 != target_sum:
        if sum1 > target_sum:
            sum1 -= new_queue[start]
            start += 1

        elif sum1 < target_sum:
            end += 1
            if end >= new_queue_len:
                return - 1
            sum1 += new_queue[end]
        cnt += 1
    return cnt

 

📌 problem  

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

 

프로그래머스

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

programmers.co.kr

 

반응형