https://www.acmicpc.net/problem/2346
평소에 별로 인풋이 없으니까 항상 비슷하게만 푸는거같다;;;;;ㅠ 공부점..
나는 첨에 풀땐 쉽게 deque 으로 구현했는데 다른풀이 보다가 괜찮은 풀이같아보여 복기한다 ~
vector랑 위치 나타내는 변수 pos 정의해서 구현하는 방법이다 .
이동하는 위치가 양수이면 현재위치 + (종이 숫자 -1) % 벡터 크기가 다음 위치이고
이동위치가 음수이면 현재 위치-종이 숫자 한것이 다음 위치이다. (음수면 양수 될떄까지 더한다.)
#include <iostream>
#include <vector>
using namespace std;
int N, x;
vector<pair<int ,int>> v;
int main(){
cin>>N;
for(int i=1; i<=N; i++) {
cin>>x;
v.push_back({x,i});
}
int pos=0;
while(1){
cout<<v[pos].second<<" ";
int next = v[pos].first;
v.erase(v.begin()+pos);
if(v.empty()) break;
if(next>0) pos = (pos+(next-1))%(int)v.size();
else {
pos += next;
while(pos<0) pos+=v.size();
}
}
}