[ BOJ 2559 ] 수열(Python)

uoayop·2021년 6월 1일
0

알고리즘 문제

목록 보기
82/103
post-thumbnail

문제

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

연속적인 K일의 온도의 합이 최대가 되는 값을 출력하면 된다.
answer 값이 음수가 될 수 있다는 생각을 못해서 몇번을 틀렸는지.. ^^


문제 풀이

0. 입력 받기

n, k = map(int, input().rsplit())
nums = list(map(int, input().rsplit()))

1. 포인터를 이동 시키면서 최대한 값 더해주기

  • l 포인터의 범위는 [0 ~ n-k]
  • r 포인터의 범위는 [0 ~ l+k]
  • currr 포인터가 가리키는 값을 더해주고, r을 한 칸 뒤로 이동시켜준다.
  • answer 변수에 가장 큰 curr 값을 저장한다.
  • l 포인터를 한 칸 뒤로 이동시켜주기 위해 curr에서 l 포인터가 가리키는 값을 빼준다.
for l in range(n-k+1):
    while r < l + k and r < n:
        curr += nums[r]
        r += 1
    
    answer = max(answer, curr)
    curr -= nums[l]

코드

import sys
input = sys.stdin.readline

n, k = map(int, input().rsplit())
nums = list(map(int, input().rsplit()))

r, answer, curr = 0, float('-inf'), 0

for l in range(n-k+1):
    while r < l + k and r < n:
        curr += nums[r]
        r += 1
    print("[curr]:{0}, [r]:{1}, [answer]:{2}".format(curr, r, answer))

    answer = max(answer, curr)
    curr -= nums[l]

print(answer)
profile
slow and steady wins the race 🐢

0개의 댓글