문제
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'프로그래머스' 카테고리의 다른 글
| [프로그래머스] lv1. 과일 장수 - Python (0) | 2023.06.08 |
|---|---|
| [프로그래머스] lv2. 연속된 부분 수열의 합 - Python (0) | 2023.06.05 |
| [프로그래머스] 큰 수 만들기 - Python (0) | 2023.03.29 |
| [프로그래머스] 땅 따먹기 - Python (0) | 2023.02.27 |
| [프로그래머스] 2xn 타일링 - Python (0) | 2023.01.16 |