https://www.acmicpc.net/problem/10025
더운 여름날 동물원의 백곰 앨버트는 너무 더워서 꼼짝도 하기 싫다. 다행히도 사육사들이 앨버트의 더위를 식히기 위해 얼음이 담긴 양동이들을 가져다 주었다. 앨버트가 가장 적은 거리만 움직이고도 최대한 많은 얼음으로 더위를 식힐 수 있도록 도와주자.
우리 안은 1차원 배열로 생각하며, 총 N(1 ≤ N ≤ 100000)개의 얼음 양동이들이 xi(0 ≤ xi ≤ 1,000,000)좌표마다 놓여 있고 각 양동이 안에는 gi(1 ≤ gi ≤ 10,000)씩의 얼음이 들어 있다. 일단 앨버트가 자리를 잡으면 그로부터 좌우로 K(1 ≤ K ≤ 2,000,000) 만큼 떨어진 양동이까지 닿을 수 있다. 앨버트는 양동이가 놓여 있는 자리에도 자리잡을 수 있다. 모든 얼음 양동이의 위치는 다르다.
앨버트가 최적의 자리를 골랐을 때 얼음의 합을 구하시오. 즉, 얼음들의 합의 최댓값을 구해야 한다.
제출 1769 정답 비율 34%
#include <stdio.h>
#define MAX 1000
int main() {
int ice, loc;
int N, K;
int min, max;
int left, right;
int sum=0;
int sumMax = 0;
int bucket[MAX];
scanf("%d %d", &N, &K);
//N개의 얼음양동이, K길이
scanf("%d %d", &ice, &loc);
bucket[loc] = ice;
min = loc, max = loc;
//첫번째 입력받은 loc와 ice 입력받으며 최소최대위치 계산 시작
for (int i = 0; i < N-1; i++) {
scanf("%d %d", &ice, &loc);
min = ((min < loc) ? min : loc);
max = ((max > loc) ? max : loc);
bucket[loc] = ice;
}//loc번째 bucket에 얼음의 양 ice 입력
for ( left = min; left + 2 * K <= max; left++) {
sum=0;
for (int i = 0; i < 2 * K; i++) {
sum += bucket[min + i];
}
sumMax = ((sumMax > sum) ? sumMax : sum);
}//left 기준으로 2K까지의 구간의 sum을 구하고 sum들의 최댓값을 sumMax에 저장
printf("%d", sumMax);
}