# 3. APS/SWEA

SWEA # Python_D2_4835_구간합 ✅

둥굴둥굴둥굴레차 2021. 2. 18. 02:12

 

 

⚾ [문제]

 

N개의 정수가 들어있는 배열에서 이웃한 M개의 합을 계산하는 것은 디지털 필터링의 기초연산이다.
M개의 합이 가장 큰 경우와 가장 작은 경우의 차이를 출력하는 프로그램을 작성하시오.

 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

[input]
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

[output]
#1 21
#2 11088
#3 1090
import sys
sys.stdin = open("input.txt")

T = int(input())

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

    if N < M:
        N, M = M, N

    max_sum = 0
    # 원래는 min_sum = sys.maxsize 해주었지만
    # swea에서 답안제출 시에는 sys를 import하는 것을 허용X
    # 그래서 임의로 큰 숫자를 넣어줌.
    min_sum = 999999999

    # 해당 케이스에서 총 몇 번 계산해줘야할지 정해줌
    for i in range(N-M+1):
        nums_sum = 0
        # 계산위치 정해주기
        for j in range(i, M+i): # (0, 5) (1, 6) (2, 7) ... (5, 10)
            nums_sum += nums[j]
        # 최솟값과 최댓값 구하기
        if nums_sum > max_sum:
            max_sum = nums_sum
        if nums_sum < min_sum :
            min_sum = nums_sum


    print("#{} {}".format(tc, max_sum - min_sum))

 


 

🍦 [복습]

 

# 1. 210218

 

변수 초기화 및 선언을 해주는 위치를 자꾸 틀린다...

 for i in range(N-M+1):
        nums_sum = 0
        # 계산위치 정해주기
        for j in range(i, M+i): # (0, 5) (1, 6) (2, 7) ... (5, 10)
            nums_sum += nums[j]
        # 최솟값과 최댓값 구하기
        if nums_sum > max_sum:
            max_sum = nums_sum
        if nums_sum < min_sum :
            min_sum = nums_sum

nums_sum = 0 을 첫 번째 for문 바로 아래에 초기화 시켜줘야 한다!

그래야 다음으로 옮겨간 범위의 합을 넣어주지~~! >︿<

 

 

 

# 2. 210223

 

복습 완료

 

 

 

# 3. 210225

 

복습 완료