Data is ___ ?

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

1. 문제설명

  • 두 개의 큐가 주어질 때, 각 큐의 합이 같도록 만들기 위한 최소 이동 횟수 구하기
  • 한 번의 pop과 한 번의 insert를 합쳐서 1회 수행

 

2. 문제해결

def solution(queue1, queue2):
    from collections import deque 
    queue1 = deque(queue1)
    queue2 = deque(queue2)
    cur1 = sum(queue1)
    cur2 = sum(queue2)
    target = (cur1+cur2)//2
    result = 0
    l = 2*(len(queue1) + len(queue2)) 
    
    while result < l:
        if cur1 == cur2:
            return result 
        elif cur1 > cur2:
            c1 = queue1.popleft()
            queue2.append(c1)
            cur1 -= c1
            cur2 += c1
            result += 1
        else:
            c2 = queue2.popleft()
            queue1.append(c2)
            cur1 += c2
            cur2 -= c2
            result += 1
    if result == l:
        return -1
    return result
  • deque을 이용해서 큐의 특징 이용하기
  • pop & insert를 반복하면서 각 큐의 합을 비교하고, 합이 같으면 현재까지 이동 횟수를 반환한다.
  • 단, 매번 sum을 구하면 시간이 오래 걸리므로 처음에 구해놓고 더하기/빼기만 해주면서 비교한다.

'Programming > CodingTest' 카테고리의 다른 글

[Leetcode 785] Is Graph Bipartite ?  (0) 2025.02.06
[Leetcode 32] Longest Valid Parentheses  (0) 2025.02.06
[Leetcode 42] Trapping Rain Water  (0) 2025.02.05
[프로그래머스] 메뉴 리뉴얼  (2) 2025.02.02
[Leetcode 37] Sudoku Solver  (0) 2025.02.02
profile

Data is ___ ?

@콩순이컴퓨터

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...