알고리즘

[Python | 프로그래머스 | Lv_2] 연속된 부분 수열의 합

deedee2 2024. 5. 8. 00:20
728x90

😉 아이디어

1. 투포인터 활용 👉 포인터 사이의 값을 유지 및 관찰, 조건 일치 시 리스트에 저장

2. 리스트 정렬 기준 '인덱스의 값 차이(갭)', '첫번째 인덱스'

😉 풀이

def solution(sequence, k):
    answer = []
    # 투포인터 + 누적합
    l = 0
    r = 0
    
    lst = []
    mx = len(sequence)
    summ = sequence[l]
    
    while l < mx:
        # print('l, r = ' + str(l) + ', ' + str(r) + ', summ = ' + str(summ))
        if summ == k:
            lst.append([l, r])
        
        if r + 1 < mx and summ < k:
            r += 1
            summ += sequence[r]
        elif l + 1 < mx:
            summ -= sequence[l]
            l += 1
        else:
            break
                
    lst.sort(key = lambda x : (x[1] - x[0], x[0]))
    return lst[0]

✔ 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/178870?language=python3