알고리즘/프로그래머스
[2022 KAKAO TECH INTERNSHIP] 두 큐 합 같게 만들기
래울
2023. 11. 12. 20:06
https://school.programmers.co.kr/learn/courses/30/lessons/118667
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
list의 pop(n)을 사용하게 되면, O(n) 시간복잡도를 가진다.
deque의 popleft를 통해 O(1) 의 시간복잡도로 원소를 pop 해준다.
단순히 한쪽의 queue에서 다른 쪽의 queue로 값을 더하고 빼면서 정답을 찾는 문제이다.
종료조건의 경우 하나의 큐가 pop, append를 반복하여 처음으로 돌아올 때 필요한 횟수인 (queue1 + queue2) * 2 로
제약한다.
from collections import deque
def solution(queue1, queue2):
queue1 = deque(queue1)
queue2 = deque(queue2)
answer = 0
sum1 = sum(queue1)
checkInf = len(queue1)
sum2 = sum(queue2)
if sum1 == sum2:
return 0
while True:
answer += 1
if sum1 > sum2:
temp = queue1.popleft()
queue2.append(temp)
sum1 -= temp
sum2 += temp
else:
temp = queue2.popleft()
queue1.append(temp)
sum2 -= temp
sum1 += temp
if sum1 == sum2:
return answer
if checkInf * 4 <= answer:
return -1