문제
코딩테스트 연습 - 두 큐 합 같게 만들기 | 프로그래머스 스쿨 (programmers.co.kr)
풀이
큐에서 popleft 해서 다른 큐에 append 하는 과정은 마치 두 큐를 하나의 리스트로 이어놓은 다음, 두개의 포인터를 계속해서 옮겨가는 과정과 같다. 따라서 start, end를 queue1의 첫번째 인덱스와 마지막 인덱스로 초기화한 뒤, 만약 두 큐 원소들의 합의 절반 값인 target 보다 start부터 end까지의 구간 합 now 가 크다면 start에 1을 더하면서 원래 start에 있던 원소를 빼고, 작다면 end에 1을 더한 뒤 해당 인덱스 원소를 더해주는 방식으로 구현했다. 옮긴 횟수가 답이되겠다.
def solution(queue1, queue2):
answer = 0
q = queue1 + queue2
length = len(q)
now = sum(queue1)
target = sum(q) // 2
start,end = 0,len(queue1)-1
flag = False
while start <= end:
if now > target:
if start >= length:
break
now -= q[start]
start += 1
answer += 1
elif now < target:
if end + 1 >= length:
break
end += 1
now += q[end]
answer += 1
else:
flag = True
break
return answer if flag else -1
'PS > 프로그래머스' 카테고리의 다른 글
합승 택시 요금 (lv3) (0) | 2022.09.04 |
---|---|
표 편집 (lv3) (0) | 2022.09.04 |
[1차] 프렌즈4블록 (lv2) (0) | 2022.09.04 |
[카카오 인턴] 보석 쇼핑 (lv3) (0) | 2022.09.04 |
[1차] 셔틀버스 (lv3) (0) | 2022.09.02 |