PROGRAMMERS 두 큐 합 같게 만들기

LONGNEW·2022년 8월 24일
0

BOJ

목록 보기
322/333

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

input :

  • 1 ≤ queue1의 길이 = queue2의 길이 ≤ 300,000
  • 1 ≤ queue1의 원소, queue2의 원소 ≤ 10^9

output :

  • 각 큐의 원소 합을 같게 만들기 위해 필요한 작업의 최소 횟수를 return

조건 :

  • 하나의 큐를 골라 원소를 추출(pop)하고, 추출된 원소를 다른 큐에 집어넣는(insert) 작업


2022.12.26

잘못 된 점.

  1. target에 대한 정의를 한 후 접근을 해야 했다.
  2. 종료 조건에 대한 생각을 하지 않았다. (무한 반복이라면 이를 종료해야 한다)

조건이 너무 많다면 빠뜨리는 부분이 많다. 편하게 생각할 수 있는것으로 먼저 구현하기.


idea

위의 마지막 문장인 합이 큰 곳에서 pop을 하면 되는 이유 떄문에 고민을 했는데
해설을 작성해 주신 분께서 설명을해두셨다.
pop을 하는 이유

주의

위의 연산을 계속 수행하기만 할 뿐 끝나지 않을 수도 있다.
그런 경우에 위의 조건이 필요하다.

from collections import deque

def solution(queue1, queue2):
    q1, q2 = deque(queue1), deque(queue2)
    length = len(q1) + len(q2)
    q1_sum, q2_sum = sum(q1), sum(q2)
    answer = 0

    total = q1_sum + q2_sum
    if total % 2 == 1:
        return -1

    if max(max(q1), max(q2)) > total // 2:
        return -1

    while q1_sum != (total // 2):
        if answer > length * 2:
            return -1
        
        answer += 1
        if q1_sum > q2_sum:
            popped_item = q1.popleft()
            q2.append(popped_item)
            q1_sum -= popped_item
            q2_sum += popped_item
        else:
            popped_item = q2.popleft()
            q1.append(popped_item)
            q1_sum += popped_item
            q2_sum -= popped_item
    return answer

0개의 댓글