자료구조와 알고리즘/문제풀기

백준 10845 - 큐 구현

now0204 2023. 4. 5. 11:38

배열로 큐를 구현하는 문제이다. 

-큐는 FIFO구조이다.  스택과 반대로 순서를 의미할 때 사용한다.  <-pop 1,2,3 <-push

- [begin, end)를 이용해서 큐를 배열로 구현할 수 있다.

- 하나의 큐 연산의 시간복잡도는 1이다.

public class Main{
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
         myqu m = new myqu();
        int t = Integer.parseInt(br.readLine());
        String input;
        while(t-- >0){
            input = br.readLine();
            if(input.contains("push")){
                m.push(Integer.valueOf(input.substring(input.indexOf(' ')+1)));
            }else if(input.equals("pop")){
                System.out.println(m.pop());
            } else if (input.equals("size")) {
                System.out.println(m.size());
            } else if (input.equals("empty")) {
                System.out.println(m.empty());
            } else if (input.equals("front")) {
                System.out.println(m.front());
            } else if (input.equals("back")) {
                System.out.println(m.back());
            }
        }
    }
}

class myqu{
    private int[] arr;
    private int begin=0;
    private int end =0;

    myqu(){
        this(10000);
    }
    myqu(int n){
        arr = new int[n];
    }
    //push
    public void push(int n){
        if(end>=arr.length)
            ensure();
        arr[end++] = n;
    }
    //fifo
    public int pop(){
        if(empty() ==1 || size() ==0)return -1;
        int rval = arr[begin];
        arr[begin++]=0;

        return rval;
    }
    //end - begin
    public int size(){
        return end-begin;
    }
    public int empty(){
        if(size()==0) return 1;
        return 0;
    }
    //맨 앞
    public int front(){
        if(empty()==1||size()==0)return -1;
        return arr[begin];
    }
    //end -1 맨 뒤 
    public int back(){
        if(empty()==1||size()==0)return -1;
        return arr[end-1];
    }
    //크기 자동확보 
    private void ensure(){
        int[] temp = new int[arr.length+6];
        System.arraycopy(arr,0,temp,0,arr.length);
        arr = temp;
    }

}