4835 - 구간합

박재현·2022년 2월 14일
0

알고리즘 부수기

목록 보기
14/43
post-thumbnail

문제 설명

정의

배열의 크기와 원소, 구간의 크기를 입력받은 후 가장 큰 구간합과 가장 작은 구간합의 차를 구하여라

입력

배열의 크기, 구간의 크기를 입력받고, 그 다음 줄에 배열 크기만의 원소를 입력받는다.

3
10 3
1 2 3 4 5 6 7 8 9 10
10 5
6262 6004 1801 7660 7919 1280 525 9798 5134 1821 
20 19
3266 9419 3087 9001 9321 1341 7379 6236 5795 8910 2990 2152 2249 4059 1394 6871 4911 3648 1969 2176

출력

배열의 가장 큰 구간합과 가장 작은 구간합의 차를 출력한다.

#1 21
#2 11088
#3 1090

문제 풀이

  1. i = 0 -> 배열 크기 - 구간의 크기 + 1 까지 반복
  2. 구간의 합 += arr[i -> 구간크기]
  3. max, min 비교해서 최신화
  4. max-min 출력

코드

T = int(input())
for tc in range(1, T+1):
    N, M = map(int, input().split())
    arr = list(map(int, input().split()))

    max = 0
    min = 10000 * M

    for i in range(N-M+1):
        sample = arr[i:i+M]
        temp = reduce(lambda a, b: a + b, sample)
        max = temp if max < temp else max
        min = temp if min > temp else min
    result = max - min

    print(f"#{tc} {result}")
profile
공동의 성장을 추구하는 개발자

0개의 댓글