상세 컨텐츠

본문 제목

[Stack] 두 개의 스택

본문

문제 풀이

하나의 배열 안에 두 개의 스택이 존재합니다.
두 개의 스택을 개별 스택으로 생각합니다.
한 방향에서 데이터의 삽입과 삭제를 할 수 있도록 LIFO 구조로 push, pop 기능을 개별 스택에 구현했습니다.

선언 및 초기화

public class TwoStack<T> {

  private int maxSize;
  private int topA, topB;
  private T[] array;

  public TwoStack(int maxSize) {
    this.maxSize = maxSize;
    this.topA = -1;
    this.topB = maxSize;
    array = (T[]) new Object[maxSize];
  }

PUSH

 public void pushA(T data) {
    if (topA < topB - 1) {
      array[++topA] = data;
    }
  }

  public void pushB(T data) {
    if (topA < topB - 1) {
      array[--topB] = data;
    }
  }

POP

  public T popA() {
    if (topA > -1) {
      T remove = array[topA];
      array[topA--] = null;
      return remove;
    }
    return null;
  }

  public T popB() {
    if (topB < maxSize) {
      T remove = array[topB];
      array[topB++] = null;
      return remove;
    }
    return null;
  }

관련글 더보기

댓글 영역