백준 1021 c++
#include <iostream>
#include <deque>
#include <vector>
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, M, i, j, temp, total_count = 0, size;
int left = 0, right = 0;
vector <int> vi;
deque <int> circle;
cin >> M >> N;
//찾을 값 저장
for (i = 0; i < N; i++)
{
cin >> temp;
vi.push_back(temp);
}
//덱 초기화
for (i = 1; i <= M; i++)
{
circle.push_back(i);
}
//total_count 값 찾기
for (i = 0; i < N; i++)
{
//vi[i] 각각 원소에 따라 수행
size = circle.size();
for (j = 0; j < size; j++)//left와 right 중 짧은 거리 찾기
{
if (circle[j] == vi[i])
{
right = j;
left = size - j;
break;
}
else
{
;
}
}
if (right <= left)//오른쪽으로 가는 거리가 더 짧을 경우
{
while (1)//3번 연산
{
if (circle.front() == vi[i])
{
break;
}
else
{
circle.push_back(circle.front());
circle.pop_front();
total_count++;
}
}
}
else//왼쪽으로 가는 거리가 더 짧을 경우
{
while (1)//2번 연산
{
if (circle.front() == vi[i])
{
break;
}
else
{
circle.push_front(circle.back());
circle.pop_back();
total_count++;
}
}
}
circle.pop_front();//1번 연산
}
cout << total_count << "\n";
return 0;
}