ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 큐에 대해 알아보자
    Knowledge/Data Structure 2019. 9. 5. 18:24
    반응형

    - 큐란?

     

    한쪽 끝에서만 자료를 넣고 다른 한쪽 끝에서만 뺄 수 있는 구조

    먼저 넣은 것이 가장 먼저 나오기 때문에 FIFO ( First In First Out) 라고도 한다

     

    - 주로 사용하는 메소드 ( Java )

     

    push, pop, front, back, empty, size가 있다고 하는데 그건 C나 C++ 얘기인 것 같고

    자바에서 LinkedList로 큐를 구현했을 경우는

     

    - isEmpty() : 비어있는지 확인

    - offer() : 큐의 뒤에 값을 입력한다

    - poll() : 큐의 가장 앞에 있는 값을 꺼내고 반환한다

    - peek() : 큐의 가장 앞에 있는 값을 확인만 한다

     

    - 구현

     

    이 역시도 백준 큐 구현 문제 ( https://www.acmicpc.net/problem/10845 ) 에 맞춰서 구현한 것임을 미리 알린다

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    import java.io.*;
     
    public class Main {
     
        private int[] queue;
        private int begin;
        private int end;
     
        Main() {
            queue = new int[10000];
            begin = 0;
            end = 0;
        }
     
        void push(int data) {
            queue[end] = data;
            end++;
        }
     
        boolean empty() {
     
            if (begin == end) {
                return true;
            } else {
                return false;
            }
     
        }
     
        int size() {
     
            return end - begin;
        }
     
        int front() {
     
            return queue[begin];
        }
     
        int back() {
     
            return queue[end - 1];
        }
     
        int pop() {
     
            if (empty()) {
                return -1;
            }
     
            begin++;
            return queue[begin - 1];
        }
     
        public static void main(String[] args) throws IOException {
     
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
     
            String nStr = br.readLine();
            int n = Integer.parseInt(nStr);
     
            String input = "";
            int pushValue = 0;
     
            Main queue = new Main();
     
            for (int i = 0; i < n; i++) {
                input = br.readLine();
     
                if (input.startsWith("push")) {
     
                    String[] arr = input.split(" ");
                    pushValue = Integer.parseInt(arr[1]);
                    queue.push(pushValue);
     
                } else if (input.startsWith("pop")) {
     
                    if (queue.empty()) {
                        bw.write(-1 + "\n");
                    } else {
                        bw.write(queue.front() + "\n");
                        queue.pop();
                    }
     
                } else if (input.startsWith("size")) {
     
                    bw.write(queue.size() + "\n");
     
                } else if (input.startsWith("empty")) {
     
                    if (queue.empty()) {
                        bw.write(1 + "\n");
                    } else {
                        bw.write(0 + "\n");
                    }
     
                } else if (input.startsWith("front")) {
     
                    if (queue.empty()) {
                        bw.write(-1 + "\n");
                    } else {
                        bw.write(queue.front() + "\n");
                    }
     
                } else if (input.startsWith("back")) {
     
                    if (queue.empty()) {
                        bw.write(-1 + "\n");
     
                    } else {
                        bw.write(queue.back() + "\n");
                    }
     
                }
     
            }
     
            br.close();
            bw.flush();
            bw.close();
            // reader와 writer를 닫는다
     
        }
     
    }

     

    반응형

    'Knowledge > Data Structure' 카테고리의 다른 글

    덱에 대해 알아보자  (0) 2019.10.18
    스택에 대해 알아보자  (0) 2019.09.04
    시간복잡도를 표현하자! Big O 표기법  (0) 2019.09.04

    댓글

Designed by Tistory.