도비LOG(跳飛錄)

도비의 AI 엔지니어 도전기

알고리즘

[프로그래머스] 연속된 부분 수열의 합 (Lv.2) - 파이썬 풀이

나쁜도비 2023. 5. 6. 11:38


풀이

  투포인터 방법을 이용한다. left 포인터를 고정시키고 left 포인터 뒤부터 차례대로 훑어가면서 부분합을 누적시키고, 부분합이 k에 도달하였을 때 left와 right 인덱스를 정답 후보군 배열(result)에 추가해준다.

  그 뒤 result 배열을 right - left 순으로 정렬해준 뒤, 길이가 가장 짧은 부분 수열을 리턴한다.

 

# 프로그래머스 연속된 부분 수열의 합 LV2 https://school.programmers.co.kr/learn/courses/30/lessons/178870
def solution(sequence, k):
    result = []
    right = 0
    summation = 0
    for left in range(len(sequence)):
        while right < len(sequence) and summation < k:
            summation += sequence[right] 
            right += 1
            
        if summation == k:
            result.append((left, right-1))
                
        # 다음 구간을 더 탐색하기 위해 앞쪽 값을 버린다.
        summation -= sequence[left]

        # left~right의 길이가 가장 짧은 순으로 정렬한다.
        result.sort(key=lambda x: x[1]-x[0])

    return result[0]

 

문제 출처

https://school.programmers.co.kr/learn/courses/30/lessons/178870

728x90