: 구현?
1) 일단을 그림을 그려보면서 문제를 이해를 하려고 노력함.
2) start와 end 정점을 만든 후, 1초마다
방향을 선정해서 함께 오른쪽, 왼쪽 하는
즉 증감을 하면서 입력된 벡터에 도달하는지 카운팅을 하면서 진행함.
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
#include <iostream>
// 20:41 ~ 21:11
int main()
{
//5칸으로 이루어져 있는데
// 1칸을 차지하는 바구니가 있음.
// 처음에 왼쪽 1칸을 차지함.
// 각 사과는 5칸 중 한칸의 상단에서 떨어지기 시작함.
// 한 사과가 바닥에 닿는 즉시, 다른 사과가 떨어짐.
// go | | | | | |
// 1
// 5
// 3
// 떨어지는 위치가 순서대로 주어짐.
// go | | | | | |
// 1
// 5
// 3
// 왼쪽에서 2칸을 먼저 차지함.
// start 랑 end 정점을 만들고, 한칸씩 이동할때마다 증감.
// 타겟으로 잡은 정점이 start 와 end 안에 이상 이하일 경우에 이동거리 종료
//[0] = true;
//[1] = true;
//v[0] = true;
//v[4] = true;
//v[2] = true;
int n, m;
cin >> n >> m;
int j;
cin >> j;
vector<int>v(j);
for (int i = 0; i < j; ++i)
{
cin >> v[i];
}
int start = 1;
int end = start + m - 1;
int res = 0;
// v개의 갯수만큼 진행 해야 함.
for (int i = 0; i < j; ++i)
{
while (1)
{
// 접하니까 이동을 해야함.
// 오른쪽으로 이동할까?
// 왼쪽으로 이동할까?
// 를 정해야 함.
if (start <= v[i] && v[i] <= end)
{
//cout << "whtae" << endl;
break;
}
if (end < v[i])
{
//오른쪽으로 이동해야 함.
start += 1;
end += 1;
//cout << "right" << endl;
}
else if (start > v[i])
{
//왼쪽으로 이동해야 함.
start -= 1;
end -= 1;
//cout << "left" << endl;
}
++res;
//cout << start << endl;
//cout << end << endl;
}
}
cout << res;
}