본문 바로가기
Programming/Algorithm

백준 회전하는 큐

by OKOK 2018. 1. 29.

/*

회전하는 큐라. 한번 문제를 읽어보고 풀어보도록 하겠습니다. 복습의 개념이 아니라,

한번 풀어보도록 하겠습니다. 현재시간 5시 13분입니다. 3가지 연산이 가능합니다.

첫번째 원소를 뽑아내는 것, 왼쪽으로 한 칸 이동하는 것 팝프론트해서 백하면 되겠습니다.

오른쪽에 한 칸 이동하는 것은, 팝 백 해서 프론트하면 되겠습니다.

포함되어 있는 수 ㅔㄴ이 주어지고 뽑아내려고 하는 원소의 위치가 주어집니다.

처음 큐에서의 위치입니따. 2번 3번 연산의 

최솟값을 출력하는 프로그램을 작성하세요 주어진 순서대로 뽑아내는데 드는 2번 3번 연산의

최솟값을 출력하는 프로그램.

*/


#include <iostream>

#include <deque>

using namespace std;

int n, r;

deque<int> deq;

deque<int>::iterator iter;


int main() {

cin >> n >> r;

for (int i = 1; i <= n; i++)

deq.push_back(i);

int cnt = 0;

for (int i = 0; i < r; i++) {

int now;

cin >> now;

int size = deq.size();

int index = 1;


for (iter = deq.begin(); iter < deq.end(); iter++) {

if (*iter == now) break;

index++;

}


int left = index - 1;

int right = size - index + 1;

if (left < right) {

for (int i = 1; i <= left; i++)

{

deq.push_back(deq.at(0));

deq.pop_front();

cnt++;

}

deq.pop_front();

}

else {

for (int i = 1; i <= right; i++) {

deq.push_front(deq.at(size - 1));

deq.pop_back();

cnt++;

}

deq.pop_front();

}

}

cout << cnt << endl;

return 0;


큐가 없더라도 배열을 앞뒤로 이동하면서 head, tail 하면서 충분히 찾을 수 있으리라 생각됩니다. 그러나, 지금은 익숙하지 않기 때문에 오케이. 일단 이렇게 처리하도로고 하겠습니다. 이렇게 문제에 대해서 익수가게 만들은 다음에, 천천히 구현하도록 합니다.