비내림차순으로 정렬된 수열이 주어질 때, 다음 조건을 만족하는 부분 수열을 찾으려고 합니다.
수열을 나타내는 정수 배열 sequence와 부분 수열의 합을 나타내는 정수 k가 매개변수로 주어질 때, 위 조건을 만족하는 부분 수열의 시작 인덱스와 마지막 인덱스를 배열에 담아 return 하는 solution 함수를 완성해주세요. 이때 수열의 인덱스는 0부터 시작합니다.
def solution(sequence, k):
# 시작, 마지막 인덱스
start, end = 0, 0
# k와 값을 비교할 변수
res_sum = sequence[0]
# sequence의 배열 lengh
idx = len(sequence)
# 값을 저장할 변수
arr = [0, 1000001]
# start, end의 값이 sequence의 길이를 넘지 않을 때 루프
while start < idx and end < idx:
if res_sum == k:
# 새로 찾은 값의 인덱스 길이 차이가 arr에 저장된 값의 인덱스 길이 차이보다 작다면
# arr에 값 저장
if end - start < arr[1] - arr[0]:
arr = [start, end]
# sequence[0]로 시작했기 때문에 연산 후 start를 더해줌
res_sum -= sequence[start]
start += 1
elif res_sum > k:
res_sum -= sequence[start]
start += 1
else:
end += 1
if end < idx:
res_sum += sequence[end]
return arr