Programming/SWEA

[SWEA 4835].[파이썬 S/W 문제해결 기본] 1일차 - 구간합

토토모에요 2021. 7. 31. 14:24
728x90
반응형

SW Expert Academy에서 학습용으로 문제를 가져왔습니다. 문제가 될 시 수정, 삭제하겠습니다.

https://swexpertacademy.com/main/main.do

문제 : 
N개의 정수가 들어있는 배열에서 이웃한 M개의 합을 계산하는 것은 디지털 필터링의 기초연산이다.
M개의 합이 가장 큰 경우와 가장 작은 경우의 차이를 출력하는 프로그램을 작성하시오.
다음은 N=5, M=3이고 5개의 숫자 1 2 3 4 5가 배열 v에 들어있는 경우이다.

이웃한 M개의 합이 가장 작은 경우 1 + 2 + 3 = 6

이웃한 M개의 합이 가장 큰 경우 3 + 4 + 5 = 12
답은 12와 6의 차인 6을 출력한다.

[입력]

첫 줄에 테스트 케이스 개수 T가 주어진다.  ( 1 ≤ T ≤ 50 )
다음 줄부터 테스트케이스의 첫 줄에 정수의 개수 N과 구간의 개수 M 주어진다. ( 10 ≤ N ≤ 100,  2 ≤ M < N )
다음 줄에 N개의 정수 ai가 주어진다. ( 1 ≤ a ≤ 10000 )

[출력]

각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.

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

output

#1 21
#2 11088
#3 1090

code

Test_case=int(input())

for i in range(1,Test_case+1):
    N,M=map(int,input().split())
    N_list=list(map(int,input().split()))
    New_list=[]
    for j in range(N-M+1): #N-M+1 범위만큼 
        result=0
        for k in range(j,j+M): #연속적인 수 즉 j부터 j+M까지 더하는 result값에 더한다.
            result+=N_list[k]
        New_list.append(result)
    print("#%d %d"%(i,max(New_list)-min(New_list)))   #구간의 최대합과 최소값을 뺀다.

비교적 간단한 문제였다. 이 문제에서의 핵심은 연속된 숫자의 합을 for문으로 표현하는 것이었다.

반응형