[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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Queue {
    static int[] queue = new int[10001];
    static int front = 0;
    static int back;
    
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //커맨드 반복 횟수
        int cmdCnt = Integer.parseInt(br.readLine());
        //초기값을 모두 -1로 넣는다. 값이 없으면 바로 -1 출력하도록
        Arrays.fill(queue, -1);
        while(cmdCnt-- > 0) {
            String str = br.readLine();
            if(str.contains("push")) {
                String[] strArr = str.split(" ");
                int input = Integer.parseInt(strArr[1]);
                //가장 뒤에 값을 넣고, 다음에 값을 넣기 위해 back을 1 증가
                queue[back++= input;
            } else {
                switch(str) {
                case "pop":
                    //늘 가장 앞의 값을 출력
                    System.out.println(queue[front]);
                    //앞의 값을 pop하면 그 뒤의 값으로 덮어씌운다
                    for(int i = front + 1; i <= back; i++) {
                        queue[i - 1= queue[i];
                    }
                    //가장 뒤 값을 가리키는 인덱스가 0보다 크면 -1로 초기화하여 이전 값을 지운다
                    if(back > 0) queue[--back] = -1;
                    break;
                case "size":
                    System.out.println(back);
                    break;
                case "empty":
                    if(back == 0) {
                        System.out.println("1");
                    } else {
                        System.out.println("0");
                    }
                    break;
                case "front":
                    System.out.println(queue[front]);
                    break;
                case "back":
                    //가장 앞의 인덱스와 가장 뒤의 인덱스가 같으면 0번 인덱스 출력
                    if(front == back) {
                        System.out.println(queue[front]);
                    } else {
                        //front와 back이 다른 경우,
                        //push에서 back++에서 input대입 후에 back이 +1된 상태이므로 -1해야 정확한 위치가 된다
                        System.out.println(queue[back - 1]);
                    }
                    break;
                }
            }
        }
    }
}
cs

댓글 없음:

댓글 쓰기

3. 추상 데이터 타입