[파이썬] 백준 2559 : 수열 (실버3)
2559번: 수열
첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기
www.acmicpc.net
문제
풀이
0. 방향성 생각.
누적된 값을 계속해서 사용한다. 딕셔너리에 현재 날짜까지 합을 구해놓고 구간이 주어지면 두 지점의 누적값을 뺀다.
1. 입력, 누적 딕셔너리 만들기.
n,k = map(int,input().split())
temp = list(map(int,input().split()))
table = {}
for i in range(n) :
if i==0 :
table[i+1] = temp[i]
else :
table[i+1] = table[i]+temp[i]
2. 누적 최대값 갱신, 출력
cum_temp = table[k]
for i in range(k+1,n+1):
if cum_temp < (table[i]-table[i-k]) :
cum_temp = table[i]-table[i-k]
print(cum_temp)
전체코드
n,k = map(int,input().split())
temp = list(map(int,input().split()))
table = {}
for i in range(n) :
if i==0 :
table[i+1] = temp[i]
else :
table[i+1] = table[i]+temp[i]
cum_temp = table[k]
for i in range(k+1,n+1):
if cum_temp < (table[i]-table[i-k]) :
cum_temp = table[i]-table[i-k]
print(cum_temp)
누적합인걸 모르면 시간초과가 날 수 있는데, DP 처럼 이전에 계산된 값을 이용해서 푼다는 점을 이용해서 리스트, 딕셔너리를 만들어두고 풀면 쉽게 풀 수 있다.
'Algorithm > etc' 카테고리의 다른 글
[파이썬] 백준 1002 : 터렛 (실버3) (0) | 2023.05.30 |
---|---|
[파이썬] 백준 3273 : 두 수의 합 (실버3) (0) | 2023.05.27 |
[파이썬] 백준 10819 : 차이를 최대로 (실버) (0) | 2023.05.26 |
[파이썬] 백준 7869 : 두 원 (골드2) (0) | 2023.05.17 |
[파이썬] 백준 2166 : 다각형의 면적 (골드5) (0) | 2023.05.16 |
[파이썬] 백준 1759: 암호만들기 (골드5) (0) | 2023.05.11 |
[파이썬] 백준 1411: 비슷한 단어 (실버2) (0) | 2023.05.08 |
댓글