스크린의 위에서 떨어지는 사과 여러 개를 바구니로 담으려고 할 때, 바구니의 최소 이동거리를 구하는 문제.
바구니의 왼쪽과 오른쪽을 가리키는 변수 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;
}