덱 자료구조를 이용해 풀 수 있는 문제입니다. 그러나, 저는 덱 자료구조 말고 다른 방식으로 해결했습니다.
이미 체크한 요소는 건너뛰고 체크하지 않은 요소에 도착하면 값을 더하면서 목표지점에 도달할 때까지 반복해 해결했습니다.
#include <iostream>
#include <cmath>
int main()
{
std::cin.tie(NULL);
std::ios_base::sync_with_stdio(false);
int n;
std::cin >> n;
int* nums = new int[n];
int num;
for (int i = 0; i < n; i++)
{
std::cin >> num;
nums[i] = num;
}
int pos = 0;
for (int i = 0; i < n; i++)
{
int nMult = std::abs(pos) / n + 1;
if (pos < 0)
pos += nMult * n;
int temp = nums[pos % n] + pos;
int dir = nums[pos % n] > 0 ? 1 : -1;
std::cout << (((pos + 1) % n == 0) ? n : (pos + 1) % n) << " ";
nums[pos % n] = -10000;
bool isAvail = false;
for (int j = 0; j < n; j++)
if (nums[j] != -10000)
{
isAvail = true;
break;
}
if (!isAvail)
break;
while (pos != temp)
{
nMult = std::abs(pos) / n + 1;
if (nums[(pos + n * nMult + dir) % n] == -10000)
temp += dir;
pos += dir;
}
}
return 0;
}