문제 링크
풀이
덱을 이용하여 풀 수 있다.
덱에서 뽑을 수의 위치를 찾아서 그 위치가 덱의 중간지점보다 오른쪽에 있다면 3번을 덱의 첫 번째에 원하는 수가 위치할 때까지 반복하고, 중간지점보다 왼쪽에 있다면 2번을 첫 번째에 원하는 수가 위치할 때까지 반복한다.
코드
#include <cstdio>
#include <deque>
#include <algorithm>
using namespace std;
int main() {
deque<int> dq;
int n, m; scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++) {
dq.push_back(i);
}
int ans = 0;
while (m--) {
int k; scanf("%d", &k);
for (int i = 0; i < dq.size(); i++) {
if (dq[i] == k) {
if (i > dq.size() / 2) {
while (dq.front() != k) {
dq.push_front(dq.back());
dq.pop_back();
ans++;
}
dq.pop_front();
} else {
while (dq.front() != k) {
dq.push_back(dq.front());
dq.pop_front();
ans++;
}
dq.pop_front();
}
break;
}
}
}
printf("%d", ans);
}
'Algorithm > BOJ' 카테고리의 다른 글
백준[1120] 문자열 (0) | 2021.09.29 |
---|---|
백준[19951] 태상이의 훈련소 생활 (0) | 2021.09.28 |
백준[9663] N-Queen (0) | 2021.09.25 |
백준[1657] 두부장수 장홍준 (0) | 2021.09.10 |
백준[1648] 격자판 채우기 (0) | 2021.09.10 |