-
백준 1021 회전하는 큐 [C++]알고리즘 2018. 11. 25. 22:15
문제 링크 : https://www.acmicpc.net/problem/1021
소스코드
#include <iostream>#include <deque>#include <vector>using namespace std;int main() {int count=0;deque<int> dq;int N, M;cin >> N >> M;for (int i = 1; i <= N; ++i)dq.push_back(i);for (int i = 0; i < M; ++i) {int num;cin >> num;int index;for (int i = 0; i < dq.size(); ++i) {if (dq[i] == num) {index = i;break;}}if (index < dq.size() - index) {for (;;) {if (dq.front() == num) {dq.pop_front();break;}++count;dq.push_back(dq.front());dq.pop_front();}}else {for (;;) {if (dq.front() == num) {dq.pop_front();break;}++count;dq.push_front(dq.back());dq.pop_back();}}}cout<<count;}맨 앞에 있는 값과 뽑아 내려는 값의 인덱스 차이(거리)를 계산하여 2번연산이 이로운지, 3번연산이 이로운지 판단하여 찾을 때까지 연산을 진행 합니다.
처음에 값으로 거리를 계산하여 문제를 틀렸었는데 원소를 뽑아내고, 덱에서 제거한다는 점을 놓쳤습니다.
거리를 계산하려면 인덱스로 계산하시기 바랍니다....ㅠㅠ
'알고리즘' 카테고리의 다른 글
백준 11718,11719 그대로 출력하기 1 2 [C++] (0) 2018.11.25 백준 2747 피보나치 수 [C++] (0) 2018.11.25 백준 10866 덱 [C++] (0) 2018.11.25 백준 1158 조세퍼스 문제 [C++] (0) 2018.11.25 백준 1966 프린터 큐 [C++] (0) 2018.11.25