이 문제는 처음에 Deque로 풀었다가 메모리 초과로 인해 int 배열로 변경해서 풀었다. 음수일 때 index 구하는 게 너무 어려웠다. 계속 OutOfIndex... 여차저차해서 풀었지만 저것보다 더 좋은 방법도 있을 것 같다. 하지만 토할 것 같아서 더 이상은 생각할 수가 없다. 나중에 다시 생각해봐야지.
(근데 다른 사람들 풀이 보니까 Deque로도 다들 통과한 건 안 비밀... 나중에 Deque로 다시 도전해야겠다)
import java.io.*;
import java.util.StringTokenizer;
// 2346 풍선 터뜨리기
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int[] arr = new int[n];
StringTokenizer tokenizer = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(tokenizer.nextToken());
}
int popNext = 0;
int popCount = 1;
bw.write((popNext + 1) + " ");
while (popCount < arr.length) {
int popOrder = arr[popNext];
arr[popNext] = 0;
if (popOrder > 0) {
for (int i = 0; i < popOrder; i++) {
int index = (i + 1 + popNext) % arr.length;
if (arr[index] == 0) {
popOrder++;
} else if (i == popOrder - 1) {
popNext = index;
popCount++;
bw.write((popNext + 1) + " ");
}
}
} else { // If the popOrder is negative
for (int i = 0; i > popOrder; i--) {
int index = popNext + (i - 1) % arr.length < 0 ? arr.length + popNext + (i - 1) % arr.length : popNext + (i - 1) % arr.length;
if (arr[index] == 0) {
popOrder--;
} else if (i == popOrder + 1) {
popNext = index;
popCount++;
bw.write((popNext + 1) + " ");
}
}
}
}
br.close();
bw.flush();
bw.close();
}
}