Post

연속된 부분 수열의 합 lv2

🌈문제 링크

Desktop View

Desktop View

이 문제는 투포인터 개념을 알면 푸는데 도움이 많이 된다.
투포인터 개념을 잘 모르겠다면 아래 링크를 클릭하자

ʕっ•ᴥ•ʔっ
이거 클릭

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
-----------------------------------
sequence = [
    [1, 2, 3, 4, 5],
     [1, 1, 1, 2, 3, 4, 5],
      [2, 2, 2, 2, 2]
    ]
    
k = [7, 5, 6] # 합

return --> [2, 3], [6, 6], [0, 2]
-----------------------------------

def solution(sequence, k):
    answer = []
    end = 0
    interval_sum = 0
		
		# 수열의 길이는 백만 이하라 초기값으로 1000만 설정
    first_setting = 10000000

    for start in range(len(sequence)):
        while interval_sum < k and end < len(sequence):
            interval_sum += sequence[end]
            end += 1

        if interval_sum == k and end - start < first_setting:
            answer = [start,end-1]
            first_setting = end - start
        interval_sum -= sequence[start]

    return answer

한 번에 모든 행에 대해 동시에 실행되는 것이 아니라 각 행에 대해 반복문이 순차적으로 실행된다

  1. 첫 번째 행 [1, 2, 3, 4, 5]에 대해 k 값인 7을 찾는다.
  2. 두 번째 행 [1, 1, 1, 2, 3, 4, 5]에 대해 k 값인 5를 찾는다.
  3. 세 번째 행 [2, 2, 2, 2, 2]에 대해 k 값인 6을 찾는다
This post is licensed under CC BY 4.0 by the author.
3D GIF