본문 바로가기
TIL - 프로그래밍/Python 알고리즘

[SWEA] 4835. 구간합 - Python

by chaemj97 2022. 2. 17.
728x90

https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do

 

SW Expert Academy

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

swexpertacademy.com

 

< 📝 문제 >

N개의 정수가 들어있는 배열에서 이웃한 M개의 합을 계산하는 것은 디지털 필터링의 기초연산이다.

M개의 합이 가장 큰 경우와 가장 작은 경우의 차이를 출력하는 프로그램을 작성하시오.

 

다음은 N=5, M=3이고 5개의 숫자 1 2 3 4 5가 배열 v에 들어있는 경우이다.

1 2 3 4 5

v

1 2 3 4 5

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

1 2 3 4 5

이웃한 M개의 합이 가장 큰 경우 3 + 4 + 5 = 12
 

답은 12와 6의 차인 6을 출력한다.

 

< ❓ 생각 >

M개씩의 합을 구하면서 가장 큰 합, 가장 작은 합을 반복문을 통해 비교해서 구하기

 

< 💻 코드 >

# T : 테스트 케이스 수
T = int(input())
for tc in range(1,T+1):
    # N : 정수의 개수, M : 구간의 개수
    N, M = map(int,input().split())
    # arr : N개의 정수
    arr = list(map(int,input().split()))
    
    # 가장 큰 합, 가장 작은 합
    resultmax = 0
    resultmin = 0
    
    for i in range(N-M+1):
        s = 0
        # M개씩의 합을 구하기
        for j in range(i,i+M):
            s += arr[j]
        
        # 가장 큰 합 구하기
        if s > resultmax:
            resultmax = s
        
        # 가장 작은 합 구하기
        # resultmin에 현재 0이 대입되어 있으므로 첫번째 s값 넣기
        if resultmin == 0:
            resultmin = s
        elif s < resultmin:
            resultmin = s

    print(f'#{tc} {resultmax - resultmin}')

 

728x90
반응형

댓글