스크린의 위에서 떨어지는 사과 여러 개를 바구니로 담으려고 할 때, 바구니의 최소 이동거리를 구하는 문제.
바구니의 왼쪽과 오른쪽을 가리키는 변수 l과 r을 각각 선언하여, 사과가 떨어지는 위치가 l과 r의 사이인지 확인한다.
그렇지 않다면, 바구니의 위치가 사과의 왼쪽일 때와 오른쪽일 때의 경우를 나누어 따로 연산한다.
#include <bits/stdc++.h>
using namespace std;
int n, m, j, ret;
int main() {
cin >> n >> m >> j;
int l = 1, r;
for (int i = 0; i < j; i++) {
r = l + m - 1;
int tmp;
cin >> tmp;
if (tmp >= l && tmp <= r) continue;
if (l > tmp) {
ret += l - tmp;
l = tmp;
}
else if (l < tmp) {
ret += tmp - r;
l += tmp - r;
}
}
cout << ret << '\n';
return 0;
}