본문 바로가기

백준 풀이

백준 10845-큐

깃허브:

https://github.com/MSIQOC/BOJ/blob/master/b10845_%ED%81%90.java

 

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

 

10845번: 큐

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

이전에 스택을 직접 자바로 구현해봤다면, 이번엔 큐를 자바로 구현해보았다.

 

스택과 큐의 차이:

1.스택 - LIFO (Last In First Out)

스택이란, 한쪽이 막히고 한쪽이 뚫린 구조로 마지막으로 들어온 것이 처음으로 나가게 되는 구조를 가진다. 위의 그림에서는 처음에 0, 1, 2 순서로 스택에 쌓이게 되는데, 나갈 때는 그 반대로 2, 1, 0의 순서로 나가게 된다.

 

2.큐 - FIFO (First In First Out)

큐는 스택과 달리 양쪽이 다 뚫려있는 구조를 가지고있고, 때문에 들어온 순서대로 나가게 된다고 해서 First In First Out라는 이름을 가지고있다. 위 그림에서는 0, 1, 2 순서로 들어왔기 때문에 나갈 때에도 0, 1, 2 순서로 나가게된다.

 

스택은 한 쪽이 막혀있기 때문에 스택을 나타내는 변수 stack과 스택의 사이즈 size 변수만 사용하면 됐지만, 큐는 양쪽이 다 뚫려있기 때문에 어떻게 구현해야 할지가 막막했었지만, 나중에 size 변수 하나만을 사용하는 대신 큐의 첫 숫자의 위치를 가리키는 변수 front와 마지막 숫자의 위치를 가리키는 변수 back을 사용해서 구현하는 방식을 생각해냈다. 이 때 큐의 사이즈는 back-front로 구해주었다.

 

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
import java.io.*;
import java.util.*;
public class b10845_ť {
    public static void main(String args[]) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int back = 0;
        int front = 0;
        int q[] = new int[10000];
        while(n-->0) {
            String s = sc.next();
            if(s.equals("push")) {
                int a = sc.nextInt();
                q[back] = a;
                ++back;
            }
            else if(s.equals("pop")) {
                if(back-front==0
                    bw.write("-1\n");
                else {
                    bw.write(q[front]+"\n");
                    ++front;
                }
            }
            else if(s.equals("size")) {
                bw.write(back-front+"\n");
            }
            else if(s.equals("front")){
                if(back-front==0)
                    bw.write("-1\n");
                else
                    bw.write(q[front]+"\n");
            }
            else if(s.equals("back")) {
                if(back-front==0)
                    bw.write("-1\n");
                else
                    bw.write(q[back-1]+"\n");
            }
            else if(s.equals("empty")) {
                if(back-front==0)
                    bw.write("1\n");
                else bw.write("0\n");
            }
                
        }
        bw.flush();
    }
}
 
 

'백준 풀이' 카테고리의 다른 글

백준 9012 - 괄호  (0) 2021.01.10
백준 17413 - 단어뒤집기 2  (0) 2021.01.09
백준 10866 - 덱  (0) 2021.01.06
백준 9093 - 단어 뒤집기  (0) 2021.01.04
백준 10828번 - 스택  (0) 2021.01.04