2022. 7. 12. 23:46ใ๐ฑ Algorithm/Else
https://www.acmicpc.net/problem/2559
ํ์ด
deque ์ ์ด์ฉํด ํ์๋ค. ๋ค๋ฅธ ๋ถ๋ค์ ํฌํฌ์ธํฐ ๋ฑ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋๋ฐ ๋๋ deque ์ด ๊ฐ์ฅ ์ง๊ด์ ์ด๋ผ ๋๊ปด์ก๋ค.
์ฐ์ ๊ฐ์ฅ ๋จ์ํ๊ฒ ์ ๊ทผํ๋ฉด ๋ฆฌ์คํธ ์ฌ๋ผ์ด์ฑ์ ๋จผ์ ๋ ์ฌ๋ฆด ์ ์๋ค. ํ์ง๋ง ์ ๋ ฅ์ ์ต๋ ํฌ๊ธฐ๊ฐ ์ญ๋ง์ด๊ธฐ ๋๋ฌธ์ ๋น์ฐํ ์๊ฐ์ด๊ณผ ๋ฌธ์ ๊ฐ ํฐ์ง๋ค. ์ด์ ๋๋ฉด b๊ธ ์ํ์ ๋ปํ ์๋์์ค๋ณด๋ค ๋ ๋ปํ ์ ๊ฐ๊ฐ ์๋ ์ ์๋ค. ํด๋ฆฌ์ ฐ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ๋๋ deque ๋ฅผ ์ฌ์ฉํ๋ค.
์ฐ์ k ํฌ๊ธฐ ๋งํผ์ ์ด๊ธฐ ๋ฐฐ์ด์ deque๋ก ๊ตฌํ๋ค. ์ด๋ฅผ init_arr ๋ผ ์ ์ํ๋ค. init_arr ์ deque ๋ค. double-ended queue ๋ ๋ป์ด๋ค. ์ฆ ์์ชฝ์ผ๋ก ๋ฃ๊ณ ๋นผ๊ณ ํ ์ ์๋ค. ์ด์ init_arr์ ๋ค์ชฝ์ผ๋ก๋ ์๋ก์ด ์ซ์๋ฅผ ๋ฃ์ผ๋ฉด์ ๋์์ ๋งจ ์์ชฝ์ ์์๋ popleft() ํด์ค๋ค. ์ด๋ ๊ฒ ๋๋ฉด O(n) ์ ์๊ฐ๋ณต์ก๋๋ก arr ๋ฅผ ์ํํ๋ฉด์ init_arr ๋ฅผ ์ ๋ฐ์ดํธ ํ ์ ์๋ค. init_arr ์ deque ์ด๊ธฐ ๋๋ฌธ์ append ๋ popleft ๋ชจ๋ ์๊ฐ๋ณต์ก๋๊ฐ O(1) ์ด๋ค.
์ฝ๋
import sys
from collections import deque
input = sys.stdin.readline
n, k = map(int, input().split())
arr = list(map(int, input().split())) # arr ์ ๊ธธ์ด 100_000
init_arr = deque()
for i in range(k):
init_arr.append(arr[i])
init_sum = sum(init_arr)
result = init_sum
for i in range(k, len(arr)):
pop = init_arr.popleft()
init_sum -= pop
new = arr[i]
init_sum += new
init_arr.append(new)
result = max(result, init_sum)
print(result)
'๐ฑ Algorithm > Else' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 1527 ๊ธ๋ฏผ์์ ๊ฐ์ ํ์ด์ฌ (0) | 2022.12.30 |
---|---|
๋ฐฑ์ค 1895 ํํฐ ํ์ด์ฌ (1) | 2022.12.21 |
๋ฐฑ์ค 2346 ํ์ ํฐ๋จ๋ฆฌ๊ธฐ ํ์ด์ฌ (0) | 2022.07.04 |
๋ฐฑ์ค 16953 ํ์ด์ฌ (0) | 2022.01.25 |
๋ฐฑ์ค 2003 ํ์ด์ฌ (0) | 2022.01.07 |