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 |