풀이)
풍선에는 음수와 양수 모두 존재하기 때문에 움직임의 방향이 두 가지이다.
양수가 나온다면 해당 숫자(num)만큼 움직이면서 앞에 있는 값을 다시 뒤로 갱신해준다.
음수가 나오면 반대방향으로 뒤에 있는 풍선들을 앞으로 갱신해주면 된다.
내 코드)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Deque<int[]> q = new ArrayDeque<>();
StringTokenizer st = new StringTokenizer(br.readLine());
int[] arr = new int[n];
for(int i=0; i<n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
StringBuilder sb = new StringBuilder();
sb.append("1 ");
int in = arr[0];
for(int i=1; i<n; i++){
q.add(new int[] {(i+1), arr[i]}); // {풍선 idx, 내용}
}
while(!q.isEmpty()) {
// 양수인 경우
if(in >0) {
// 순서 뒤로 돌리기
for(int i=1; i<in; i++) {
q.add(q.poll());
}
int[] nxt = q.poll();
in = nxt[1];
sb.append(nxt[0]+" ");
}
// 음수인 경우
else {
for(int i=1; i<-in; i++ ) {
q.addFirst(q.pollLast());
}
int[] nxt = q.pollLast();
in = nxt[1];
sb.append(nxt[0]+" ");
}
}
System.out.println(sb.toString());
}
}