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에 들어있는 경우이다.
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
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
[SWEA] 5789. 현주의 상자 바꾸기 - Python (0) | 2022.02.18 |
---|---|
[SWEA] 6485. 삼성시의 버스 노선 - Python (0) | 2022.02.18 |
[SWEA] 4834. 숫자 카드 - Python (0) | 2022.02.17 |
[SWEQ] 4831. 전기버스 - Python (0) | 2022.02.17 |
[SWEA] 1206. View - Python (0) | 2022.02.17 |
댓글