from collections import deque
def solution(sequence, k):
answer = []
queue = deque()
queue_sum = 0
for i, n in enumerate(sequence) :
queue.append([i, n])
queue_sum += n
while queue_sum > k :
temp = queue.popleft()
queue_sum -= temp[1]
if queue_sum == k :
answer.append([queue[0][0],queue[len(queue)-1][0]])
return min(answer, key=lambda x:x[1]-x[0])
문제정리
sequence = [1,2,3,4,5,6] , k = 8 입력이 두개로
배열에서 인자들의 합이 k인 부분배열을 찾는 문제이다.
풀이과정
큐를 이용해서 풀이하였다.
sequence 배열을 순회하며 값을 큐에 넣었고 큐 속의 숫자들의 합을 k와 비교하여
큐 숫자 합 = k 일경우 answer배열에 저장을 하였고
큐 숫자 합 > k 일경우 큐의 앞부분을 빼며 합이 k보다 작을때까지 반복하였다.
즉 슬라이딩 윈도우와 같이 풀이하였다.
풀이 후
다른 사람 풀이를 보니 새로 큐를 만들지 않고 직접 인덱스 번호를 옮겨가며 비교하여 푸는 방법을 알 수 있었다.
나는 끝인덱스일 경우 조건을 넣어줘야하여 새로운 큐를 이용 풀이하였는데 포인터를 직접 옮겨가며 풀이하는게 더 좋았지 않았나 싶다.