回転キュー(1021)
1966 ワード
中に入ると
これは、円形キューから必要な要素を抽出する問題です.
Dequeを使用して、左または右に回転し、一番前に目的の要素が現れたらcountを停止して出力します.
コードの説明
彼は自分で左と右の移動方法と移動の基準を探している.しかし、インデックスは見つかりませんでした.どんな方法で解くか、どんな要素を使うかは知っていますが、コードで完成するのはまだ足りないと思います.解き続けると慣れますか.
1.まずnとmを受け入れる.
2.n Dequeに入れます.
検索するインデックスを配列に挿入します.
4.合計mを回転し、dequeを先に回転し、インデックスと同じ値があるかどうかを見つけます.つまり、私たちが探している数字です.同じ値がある場合は、別の変数として保存します.
5.数字がDequeサイズの半分以下の場合は、左に回転します.左に曲がるたびにcountを追加します.値が見つかったらpop forntにします.
6.条件でなければ右に曲がります.ここの繰り返し文はDequeですsize()-インデックス.私はここで間違いを犯しました.サイズでインデックスを外しますが、右に曲がります.そして、値段が見つかればpop frontをあげます.
7.完全な複文が完了したらcountを出力します.
コード#コード#
#include<deque>
#include<iostream>
using namespace std;
int main() {
//기본 정보
int n, m, x;
int index = 0;
int count = 0;
deque<int> dq;
int arr[51];
cin >> n >> m;
//dq에 값 넣기
for (int i = 1; i <= n; i++) {
dq.push_back(i);
}
//찾고자하는 데이터 인덱스 받기
for (int i = 0; i < m; i++) {
cin >> x;
arr[i] = x;
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (dq.at(j) == arr[i]) {
index = j;
break;
}
}
if (index <= dq.size() / 2) {
for (int k = 0; k < index; k++) {
dq.push_back(dq.front());
dq.pop_front();
count++;
}
dq.pop_front();
}
else {
for (int k = 0; k < dq.size() - index; k++) {
dq.push_front(dq.back());
dq.pop_back();
count++;
}
dq.pop_front();
}
}
cout << count << endl;
}
Reference
この問題について(回転キュー(1021)), 我々は、より多くの情報をここで見つけました https://velog.io/@jy1999/회전하는-큐1021テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol