Knowledge/Data Structure

큐에 대해 알아보자

TakeKnowledge 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를 닫는다
 
    }
 
}

 

반응형