https://www.acmicpc.net/problem/2346
자료구조 중에서 덱(Deque)을 이용하여 해결이 가능하다.
addFirst() - 맨 앞에 추가한다.
addLast() - 맨 뒤에 추가한다.
peek() - 맨 앞 값을 가져온다.
pollFirst() - 맨 앞 값을 제거하고 그 값을 반환한다.
pollLast() - 맨 마지막 값을 제거하고 그 값을 반환한다.
이를 이용해 앞 뒤를 자유롭게 넣고 꺼낼 수 있으므로
양수일때와 음수일때를 분기처리로 해결이 가능해진다.
import java.util.*;
public class Num2346 {
public static int N;
public static Deque<Integer> deque = new ArrayDeque<>();
public static int Num[];
public static void main(String[] args) {
//input
Scanner scanner = new Scanner(System.in);
N = Integer.parseInt(scanner.nextLine());
String[] a = scanner.nextLine().split(" ");
Num = new int[N + 1];
for (int i=1; i<=N; i++) {
Num[i] = Integer.parseInt(a[i-1]);
deque.addLast(i);
}
//logic
while(true) {
if (deque.peek() == 1)
System.out.print(deque.peek());
else
System.out.print(" " + deque.peek());
int paperNum = Num[deque.pollFirst()];
if (deque.isEmpty())
break;
N--;
if (paperNum > 0) {
for (int i = 0; i < paperNum - 1; i++) {
deque.addLast(deque.pollFirst());
}
} else {
for (int i=paperNum; i < 0; i++) {
deque.addFirst(deque.pollLast());
}
}
}
}
}