데크를 이용해 간단하게 풀 수 있다.
#include <iostream>
#include <deque>
#include <vector>
#include <algorithm>
int main(void) {
int len, N;
std::cin >> len >> N;
std::vector<int> val(N);
for (int i = 0; i < N; i++) {
std::cin >> val[i];
}
std::deque<int> mDeque;
for (int i = 0; i < len; i++) {
mDeque.push_back(i + 1);
}
int cur = 0;
int count = 0;
while (val.size() > cur) {
int pos;
for (int i = 0; i < len; i++) {
if (mDeque[i] == val[cur]) {
pos = i;
break;
}
}
if (pos > len / 2) {
//뒤로 밀기
while (mDeque.front() != val[cur]) {
int back = mDeque.back();
mDeque.pop_back();
mDeque.push_front(back);
count++;
}
mDeque.pop_front();
len--;
cur++;
}
else {
//앞으로 밀기
while (mDeque.front() != val[cur]) {
int front = mDeque.front();
mDeque.pop_front();
mDeque.push_back(front);
count++;
}
mDeque.pop_front();
len--;
cur++;
}
}
std::cout << count << "\n";
return 0;
}
|
cs |
'problem solving' 카테고리의 다른 글
1208번: 부분수열의 합2 (0) | 2020.02.20 |
---|---|
1182번: 부분수열의 합 (0) | 2020.02.20 |
1168번: 요세푸스 문제2 (0) | 2020.02.19 |
1167번: 트리의 지름 (0) | 2020.02.19 |
1149번: RGB거리 (0) | 2020.02.19 |