27 June 2019

문제 : https://www.acmicpc.net/problem/10845

이번은 큐의 개념을 익히고 실습하는 문제를 풀어보도록 하겠습니다.

import java.util.Scanner;

public class Main {

    public static void main(String args[]) {

        Scanner sc = new Scanner(System.in);

        int size = sc.nextInt();

        Queue queue = new Queue(size);

        for (int i = 0; i < size; i++) {
            switch (sc.next()) {
                case "push":
                    int val = sc.nextInt();
                    queue.push(val);
                    break;
                case "pop":
                    System.out.println(queue.pop());
                    break;
                case "size":
                    System.out.println(queue.size());
                    break;
                case "empty":
                    System.out.println(queue.empty());
                    break;
                case "front":
                    System.out.println(queue.front());
                    break;
                case "back":
                    System.out.println(queue.back());
                    break;
            }
        }
    }
}

class Queue {
    private int head;
    private int tail;
    private int[] arr;

    Queue(int size) {
        this.head = 0;
        this.tail = -1;
        arr = new int[size];
    }

    void push(int data) {
        tail++;
        arr[tail] = data;
    }

    int pop() {
        if (head > tail) {
            return -1;
        }
        int val = arr[head];
        head++;
        return val;
    }

    int size() {
        return tail - head + 1;
    }

    int empty() {
        if (head > tail) {
            return 1;
        }
        return 0;
    }

    int front() {
        if (head > tail) {
            return -1;
        }
        return arr[head];
    }

    int back() {
        if (head > tail) {
            return -1;
        }
        return arr[tail];
    }
}
이번에는 size가 정해져있기 때문에, array로 queue를 구현해보도록 하겠습니다.
head와 tail을 선언하고 각각 0,-1로 값을 초기화해주도록 합니다.
push를 할 때는 tail의 값을 1만큼 더해주고 arr[tail]값에 data를 넣어주도록 합니다.
pop은 앞에서 빼는 것이므로 arr[head]의 값을 return하고 head는 1만큼 뒤로 이동시켜줍니다.
size는 tail-head+1개 만큼 arr에 값이 들어있는 것이므로 해당 값을 return해줍니다.
front는 arr[head]의 값, back은 arr[tail]의 값을 return 해주도록 합니다.