상세 컨텐츠

본문 제목

[Queue] reverse k

본문

문제풀이

자료구조 Queue 안에 입력받은 값이 담겨있습니다.
입력 받은 값의 k번째 요소까지 값의 방향을 전환(reverse)시켜 결과를 표시해야 합니다.
k번째 요소까지 스택에 옮겨 담습니다.
스택에 담긴 값을 큐에 다시 옮겨 담습니다.

k번째 요소까지 스택 이동


Queue 첫 번째 요소 값(2)을 스택으로 이동시키면, Stack의 첫 번째 요소에는 값 2가 입력됩니다.

Queue 두 번째 요소 값(4)을 스택으로 이동시키면, Stack의 두 번째 요소에는 값 4가 입력됩니다.

Queue 두 번째 요소 값(6)을 스택으로 이동시키면, Stack의 두 번째 요소에는 값 6가 입력됩니다.


스택에 담긴 값은 다시 큐로 이동


Stack 세 번째 요소 값(6)을 Queue로 이동시키면, Queue의 첫 번째 요소에는 값 6가 입력됩니다.

Stack 두 번째 요소 값(4)을 Queue로 이동시키면, Queue의 두 번째 요소에는 값 4가 입력됩니다.

Stack 첫 번째 요소 값(2)을 Queue로 이동시키면, Queue의 세 번째 요소에는 값 2가 입력됩니다.


reverseK 구현

   public static void main(String[] args){
     Queue<Integer> queue = new Queue<>(4);
         queue.add(2);
         queue.add(4);
         queue.add(6);
         queue.add(8);
         queue.add(10);

     reverseK(queue, 3);

     System.out.print(" >>> Result : ");
     while (!queue.isEmpty()){
         System.out.print(queue.dequeue() + " ");
   }
  private static <T> void reverseK(Queue<T> queue, int k) {
    if (queue.isEmpty() || k <= 0) {
      return;
    }

    Stack<T> stack = new Stack<>(k);

    while (!stack.isFull()) {
      stack.push(queue.dequeue());
    }

    while (!stack.isEmpty()) {
      queue.enqueue(stack.pop());
    }

    int size = queue.getCurrentSize();
    for (int i = 0; i < size - k; i++) {
      queue.enqueue(queue.dequeue());
    }
  }

관련글 더보기

댓글 영역