LIST1. 1일차 - 구간합

Problem

 

SW Export Acdeomy List1

 

SW Expert Academy

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

swexpertacademy.com

 

 

 

Solving

 

 

1. 이중 For문을 이용하여 범위 내의 수를 모두 더하여 비교
2. 슬라이싱과 sum()함수를 이용하여 범위 내의 수를 더하여 비교

 

Code

 

 

방법 1

T = int(input())
for test_case in range(1, T + 1):
    N, M = map(int, input().split())
    arr = list(map(int, input().split()))
    result = [0] * (N-M+1)
    # 구간 설정하여 더하기 idx ~ idx+M
    for idx in range(N-M+1):
        for plus in range(idx, idx+M):
            result[idx] += arr[plus]
    # 최대 최소 구하기
    max = 0
    min = 10000*100+1
    for num in result:
        if num > max:
            max = num
        if num < min:
            min = num
    print(f'#{test_case} {max-min}')

 

방법 2

for test_case in range(1, int(input())+1):
    N, M = map(int, input().split())
    arr = list(map(int, input().split()))
    max = 0
    min = 10000*100+1
    for i in range(N-M+1):
        tmp = sum(arr[i:i+M])
        if tmp > max:        # 최대 
            max = tmp
        if tmp < min:        # 최소
            min = tmp
    print(f'#{test_case} {(max - min)}')

 

오류가 잘 나는 곳

M의 크기만큼 인덱싱하여 더해줘야하므로, 반복문을 돌릴 때 반복문 범위를 0 ~ N-M까지인 것을 주의하자!

<틀리거나 잘못된 부분을 댓글로 알려주세요!>

반응형