첫 접근
N, K = map(int, input().split())
xg = {}
for _ in range(N):
g, x = map(int, input().split())
xg[x] = g
xg1 = dict(sorted(xg.items()))
mx = max(xg1)
mn = min(xg1)
length = mx - mn + 1
bag = [0 for _ in range(length)]
for i in range(mn, mx + 1):
for j in range(i - K, i + K + 1):
if j in xg1:
bag[i - mn] += xg1[j]
print(bag.index(max(bag)) + 1)
결과
투포인터 알고리즘 or 슬라이딩 윈도우 기법
구간합 = 슬라이딩 윈도우
# 슬라이딩 윈도우
N, K = map(int, input().split())
ice = [0] * 10000001
for _ in range(N):
g, x = map(int, input().split())
ice[x] = g
# 초기 윈도우
window = sum(ice[:2*K+1])
max_sum = window
for i in range(1, 10000001 - 2*K):
window = window - ice[i - 1] + ice[i + 2*K]
max_sum = max(window, max_sum)
print(max_sum)
투포인터 익숙해지기.