새소식

PS/백준

[백준/2559] 수열 (Python)

  • -

Problem : https://www.acmicpc.net/problem/2559

 

2559번: 수열

첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기

www.acmicpc.net

 

Difficulty : Silver 3

 

Status : Solved

 

Time : 00:03:19

 


 

문제 설명

 

더보기

매일 아침 9시에 학교에서 측정한 온도가 어떤 정수의 수열로 주어졌을 때, 연속적인 며칠 동안의 온도의 합이 가장 큰 값을 알아보고자 한다.

예를 들어, 아래와 같이 10일 간의 온도가 주어졌을 때, 

3 -2 -4 -9 0 3 7 13 8 -3

모든 연속적인 이틀간의 온도의 합은 아래와 같다.

이때, 온도의 합이 가장 큰 값은 21이다. 

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

이때, 온도의 합이 가장 큰 값은 31이다.

매일 측정한 온도가 정수의 수열로 주어졌을 때, 연속적인 며칠 동안의 온도의 합이 가장 큰 값을 계산하는 프로그램을 작성하시오. 

 

입력 및 출력

 

더보기

입력

첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기 위한 연속적인 날짜의 수이다. K는 1과 N 사이의 정수이다. 둘째 줄에는 매일 측정한 온도를 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -100 이상 100 이하이다. 

 

출력

첫째 줄에는 입력되는 온도의 수열에서 연속적인 K일의 온도의 합이 최대가 되는 값을 출력한다.

 

입력 예시

10 2
3 -2 -4 -9 0 3 7 13 8 -3

 

출력 예시

21

 

 


 

풀이

 

범위 합을 구하면 되며, 시간상의 효율을 구하기 위해 i번째 범위합은 i-1번째 범위합에서 왼쪽 끝을 빼고 오른쪽 끝을 더해주도록 하자. 이 정도만 고려하면 쉽게 풀 수 있는 문제이다. 이를 슬라이딩 윈도우라고 한다.

 

 

풀이 코드

N, K = map(int, input().split())
temp_list = list(map(int, input().split()))

part_sum = sum(temp_list[:K])
answer = part_sum

for i in range(N-K) :
  part_sum += temp_list[i+K] - temp_list[i]
  if answer < part_sum :
    answer = part_sum

print(answer)

풀이완료~

 

'PS > 백준' 카테고리의 다른 글

[백준/2660] 회장뽑기  (0) 2023.02.27
[백준/2616] 소형기관차 (Python)  (0) 2023.02.26
[백준/2437] 저울 (Python)  (0) 2023.02.25
[백준/2512] 예산 (Python)  (0) 2023.02.24
[백준/2469] 사다리 타기 (python)  (0) 2023.02.23
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.