fork download
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.Deque;
  5. import java.util.LinkedList;
  6.  
  7. public class Main {
  8. public static void main(String[] args) throws IOException {
  9.  
  10. int n = Integer.parseInt(br.readLine());
  11. int[] move = new int[n + 1]; // 풍선 번호 별로 적혀있는 숫자
  12.  
  13. // 풍선 저장
  14. Deque<Integer> que = new LinkedList<>(); // 풍선의 인덱스 저장, 1 ~ N
  15. String[] inputs = br.readLine().split(" ");
  16. for (int i = 0; i < n; i++) {
  17. int val = Integer.parseInt(inputs[i]);
  18. move[i + 1] = val;
  19. que.offer(i + 1);
  20. }
  21.  
  22. // 가장 앞에 위치한 풍선을 하나씩 꺼내어,
  23. // 풍선에 적혀있는 숫자(move)만큼 left 또는 right로 회전한다.
  24. StringBuilder sb = new StringBuilder();
  25. while (que.size() > 1) {
  26. int idx = que.poll();
  27. sb.append(idx).append(" ");
  28.  
  29. if (move[idx] > 0) {
  30. iterator(que, true, move[idx] - 1);
  31. } else {
  32. iterator(que, false, Math.abs(move[idx]));
  33. }
  34. }
  35.  
  36. sb.append(que.poll());
  37. System.out.println(sb);
  38. }
  39.  
  40. static void iterator(Deque<Integer> que, boolean isLeftIterator, int iteratorCount) {
  41. // 왼쪽으로 회전
  42. if (isLeftIterator) {
  43. for (int i = 0; i < iteratorCount; i++) {
  44. que.offer(que.poll());
  45. }
  46. } else { // 오른쪽으로 회전
  47. for (int i = 0; i < iteratorCount; i++) {
  48. que.offerFirst(que.pollLast());
  49. }
  50. }
  51. }
  52. }
Success #stdin #stdout 0.11s 52872KB
stdin
5
3 2 1 -3 -1
stdout
1 4 5 3 2