[ ALGORITHM ]/[ 백 준 ]
[BAEKJOON] 1021번 : 회전하는 큐
HiStar__
2020. 7. 30. 17:25
문 제
소 스 코 드
#include<iostream>
#include<deque>
std::deque<int> Rotation_Queue(std::deque<int>&, const int &, int& , const char&);
int main() {
std::ios_base::sync_with_stdio(false);
std::cout.tie(NULL);
std::cin.tie(NULL);
std::deque<int> dq;
int N, M, number;
std::cin >> N >> M;
int move_l{ 0 }, move_r{ 0 }, move{ 0 };
for (int i = 1; i <= N; ++i) dq.push_back(i);
for (int i = 0; i < M; ++i) {
std::cin >> number;
move_l = move_r = 0;
auto dq_l{ Rotation_Queue(dq, number, move_l, 'l') };
auto dq_r{ Rotation_Queue(dq, number, move_r, 'r') };
if (move_l < move_r) {
dq = dq_l;
move += move_l;
}
else {
dq = dq_r;
move += move_r;
}
}
std::cout << move;
return 0;
}
std::deque<int> Rotation_Queue(std::deque<int>& dq, const int & num, int& m, const char& c) {
std::deque<int> temp{ dq };
while (num != temp.front()) {
if ('r' == c) {
int value{ temp.back() };
temp.pop_back();
temp.push_front(value);
++m;
}
else if('l' == c) {
int value{ temp.front() };
temp.pop_front();
temp.push_back(value);
++m;
}
else exit(1);
}
temp.pop_front();
return temp;
}
풀 이
-
Deque이기 때문에 오른쪽으로 회전, 왼쪽으로 회전을 직접 해야지 거리값을 구할 수 있다.
N의 범위가 50 까지 있기 때문에 가능하다 생각하여 직접 회전을 하여 비교 하여 구현 하였다.
출 력 값
문 제 출 처
문제 링크 : [ BAEKJOON ] : https://www.acmicpc.net/problem/1021
1021번: 회전하는 큐
첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 ��
www.acmicpc.net