멘토링

Queue에 담긴 배열을 뒤집어 보자

langsamUndStetig 2022. 7. 16. 00:03

이를 위해서 몇 개 아이디어를 짜봤다.

큐에 들어있는 요소들을 스택에 넣은 후, 다시 큐에 넣는 방법과

배열을 만들어서 큐의 요소들을 순서대로 담은 후 역순으로 큐에 넣는 방법을 생각한 후 구현했다.


import java.util.Queue;
import java.util.*;

public class Play {

  private static Queue<Integer> queue;

// queue의 값을 순서대로 출력하는 메소드
  public static void show() {
    Iterator<Integer> iterator = queue.iterator();
    while (iterator.hasNext()) {
      System.out.print(iterator.next() + " ");
    }
  }

  // stack을 활용한 배열 순서 뒤집기
  public static void reverse() {

      Stack<Integer> stack = new Stack<>();
      Iterator<Integer> iterator2 = queue.iterator();
      while(iterator2.hasNext()) {
        stack.add(queue.poll());
      }
      queue.clear();
      Iterator<Integer> iterator3 = stack.iterator();
      while(iterator3.hasNext()) {
        queue.add(stack.pop());
      }
    }
    
    //stack을 활용한 배열 뒤집기 2
    public static void reverse2(){
      Stack<Integer> stack = new Stack<>();
      for(int nums : queue) {
        stack.push(queue.poll());
      }
            while(true) {
        queue.add(stack.pop());
        if(stack.isEmpty()) break;
      }
    }
  // stack을 활용한 배열 뒤집기 3
  public static void reverse3() {
    Stack<Integer> stack = new Stack<>();
    stack.addAll(queue);
    queue.clear();
    for(int i=0, j=stack.size();i<j;i++) {
      queue.add(stack.pop());
    }
  }
  
  // 정수 타입 배열을 활용한 배열 뒤집기
  public static void reverse4() {
  int[] abc = new int[queue.size()];
    for(int j= queue.size()-1; j>=0;j--) {
      abc[j]= queue.poll();
    }
    for(int i : abc) {
      queue.add(i);
    }
  }


  public static void main(String[] args) {

    // Queue 인터페이스를 구현한 ArrayDeque 객체에 요소 추가
    queue = new ArrayDeque<>();
    queue.add(1);
    queue.add(2);
    queue.add(3);
    queue.add(4);

    // Queue 출력
    show();
    System.out.println();
    reverse();
    // Queue 출력
    show();
    }

  }
출력값
1 2 3 4
4 3 2 1