Algorithm
SWEA 4835 구간합 (python)
광보기
2021. 4. 19. 14:52
반응형
4835. [파이썬 S/W 문제해결 기본] 1일차 - 구간합 D2
문제
N개의 정수가 들어있는 배열에서 이웃한 M개의 합을 계산하는 것은 디지털 필터링의 기초연산이다.
M개의 합이 가장 큰 경우와 가장 작은 경우의 차이를 출력하는 프로그램을 작성하시오.
다음은 N=5, M=3이고 5개의 숫자 1 2 3 4 5가 배열 v에 들어있는 경우이다.
v | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
이웃한 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는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.
풀이
T = int(input())
def range_sum(info,numbers):
# 정수의 개수 N
N = info[0]
# 구간의 개수 M
M = info[1]
# 맥스 초기값 선언
max_value = 0
# min 초기값 선언(1)
min_value = 0
# min 값을 추정하기 힘들어 초기 M구간의 합을 최솟값으로 지정
for i in range(M):
min_value += numbers[i]
# 구간합을 실행하기 위해 전체길에서 (M-1)만큼을 제외한 값을 지정(index 넘지 않기 위해)
for i in range(len(numbers)-M+1):
# 임시적인 구간합 설정
r_sum = 0
# M구간의 합 구하기
for j in range(M):
r_sum += numbers[i+j]
# 최대값 찾기
if r_sum>max_value:
max_value = r_sum
# 최소값 찾기
if r_sum<min_value:
min_value = r_sum
return max_value - min_value
for tc in range(1, T+1):
info = list(map(int, input().split()))
numbers = list(map(int, input().split()))
result = range_sum(info, numbers)
print("#{} {}".format(tc,result ))
반응형