문제
매일 아침 9시에 학교에서 측정한 온도가 어떤 정수의 수열로 주어졌을 때, 연속적인 며칠 동안의 온도의 합이 가장 큰 값을 알아보고자 한다.
예를 들어, 아래와 같이 10일 간의 온도가 주어졌을 때,
3 -2 -4 -9 0 3 7 13 8 -3
모든 연속적인 이틀간의 온도의 합은 아래와 같다.

이때, 온도의 합이 가장 큰 값은 21이다.
또 다른 예로 위와 같은 온도가 주어졌을 때, 모든 연속적인 5일 간의 온도의 합은 아래와 같으며,

이때, 온도의 합이 가장 큰 값은 31이다.
매일 측정한 온도가 정수의 수열로 주어졌을 때, 연속적인 며칠 동안의 온도의 합이 가장 큰 값을 계산하는 프로그램을 작성하시오.
https://www.acmicpc.net/problem/2559
2559번: 수열
첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기
www.acmicpc.net
import sys
N,K=map(int,sys.stdin.readline().split())
num_list=list(map(int,sys.stdin.readline().split()))
sum=[]
sum.append(0)
max=None
for x in range(N):
sum.append(sum[x]+num_list[x])
for x in range(N-K+1):
if(max==None or max<sum[x+K]-sum[x]):
max=sum[x+K]-sum[x]
print(max)
※ 누적 합

● 온도를 측정한 전체 날짜의 수 N과 합을 구하기 위한 연속적인 날짜의 수 K를 입력받은 뒤, 그 뒤 매일 측정한 온도를 나타내는 N개의 정수를 num_list라는 배열에 넣어준다. 그 후 sum이라는 배열을 정의해준 뒤 0을 append 해준다. 마지막으로 초기값이 None인 max 변수를 선언해준다.
● x는 0부터 N-1까지 돈다. sum 배열에 현재 보고있는 num_list[x]와 그 전 요소까지의 누적합인 sum[x] 더한 값을 차례대로 append 해준다. 그럼 sum[x]에는 num_list[x-1] 까지의 누적 합이 저장되어 있다.
● x는 0부터 N-K까지 돈다. 각 단계에서 sum[x+K]-sum[x] 를 해주고 max와 이 값을 비교해준다(나올 수 있는 연속되는 K개 온도의 합을 모두 고려). 이 값이 현재 max보다 크거나 max 가 아직 None 값을 가지고 있다면 max를 이 값으로 갱신해준다.
● 모든 단계가 끝나고 max를 출력해주면 답이 나오게된다.


'백준(baekjoon) > 실버' 카테고리의 다른 글
백준(baekjoon) 11047번: 동전 0(실버 4, 파이썬 PYTHON) - 그리디 알고리즘 (0) | 2022.11.18 |
---|---|
백준(baekjoon) 11660번: 구간 합 구하기 5(실버 1, 파이썬 PYTHON) - 누적 합 (2) | 2022.11.17 |
백준(baekjoon) 11659번: 구간 합 구하기 4(실버 3, 파이썬 PYTHON) - 누적 합 (0) | 2022.10.08 |
백준(baekjoon) 11053번: 가장 긴 증가하는 부분 수열(실버 2, 파이썬 PYTHON) - 동적 계획법 1 (0) | 2022.09.28 |
백준(baekjoon) 2156번: 포도주 시식(실버 1, 파이썬 PYTHON) - 동적 계획법 1 (2) | 2022.09.27 |
문제
매일 아침 9시에 학교에서 측정한 온도가 어떤 정수의 수열로 주어졌을 때, 연속적인 며칠 동안의 온도의 합이 가장 큰 값을 알아보고자 한다.
예를 들어, 아래와 같이 10일 간의 온도가 주어졌을 때,
3 -2 -4 -9 0 3 7 13 8 -3
모든 연속적인 이틀간의 온도의 합은 아래와 같다.

이때, 온도의 합이 가장 큰 값은 21이다.
또 다른 예로 위와 같은 온도가 주어졌을 때, 모든 연속적인 5일 간의 온도의 합은 아래와 같으며,

이때, 온도의 합이 가장 큰 값은 31이다.
매일 측정한 온도가 정수의 수열로 주어졌을 때, 연속적인 며칠 동안의 온도의 합이 가장 큰 값을 계산하는 프로그램을 작성하시오.
https://www.acmicpc.net/problem/2559
2559번: 수열
첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기
www.acmicpc.net
import sys
N,K=map(int,sys.stdin.readline().split())
num_list=list(map(int,sys.stdin.readline().split()))
sum=[]
sum.append(0)
max=None
for x in range(N):
sum.append(sum[x]+num_list[x])
for x in range(N-K+1):
if(max==None or max<sum[x+K]-sum[x]):
max=sum[x+K]-sum[x]
print(max)
※ 누적 합

● 온도를 측정한 전체 날짜의 수 N과 합을 구하기 위한 연속적인 날짜의 수 K를 입력받은 뒤, 그 뒤 매일 측정한 온도를 나타내는 N개의 정수를 num_list라는 배열에 넣어준다. 그 후 sum이라는 배열을 정의해준 뒤 0을 append 해준다. 마지막으로 초기값이 None인 max 변수를 선언해준다.
● x는 0부터 N-1까지 돈다. sum 배열에 현재 보고있는 num_list[x]와 그 전 요소까지의 누적합인 sum[x] 더한 값을 차례대로 append 해준다. 그럼 sum[x]에는 num_list[x-1] 까지의 누적 합이 저장되어 있다.
● x는 0부터 N-K까지 돈다. 각 단계에서 sum[x+K]-sum[x] 를 해주고 max와 이 값을 비교해준다(나올 수 있는 연속되는 K개 온도의 합을 모두 고려). 이 값이 현재 max보다 크거나 max 가 아직 None 값을 가지고 있다면 max를 이 값으로 갱신해준다.
● 모든 단계가 끝나고 max를 출력해주면 답이 나오게된다.


'백준(baekjoon) > 실버' 카테고리의 다른 글
백준(baekjoon) 11047번: 동전 0(실버 4, 파이썬 PYTHON) - 그리디 알고리즘 (0) | 2022.11.18 |
---|---|
백준(baekjoon) 11660번: 구간 합 구하기 5(실버 1, 파이썬 PYTHON) - 누적 합 (2) | 2022.11.17 |
백준(baekjoon) 11659번: 구간 합 구하기 4(실버 3, 파이썬 PYTHON) - 누적 합 (0) | 2022.10.08 |
백준(baekjoon) 11053번: 가장 긴 증가하는 부분 수열(실버 2, 파이썬 PYTHON) - 동적 계획법 1 (0) | 2022.09.28 |
백준(baekjoon) 2156번: 포도주 시식(실버 1, 파이썬 PYTHON) - 동적 계획법 1 (2) | 2022.09.27 |