ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준 10845] - [큐] - 큐 (JAVA)
    알고리즘/큐(Queue) 2018. 12. 2. 14:02

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




    이 문제는 큐를 제대로 이해하고 있는지 파악하는 문제로 보인다. 

    근데 내가 기억하는 큐는 선입선출이고 탐색은 front 할 수 있다고 알고 있었는데 이 문제는  back도 탐색을 하라고 한다. 


    그래서 push로 큐에 삽입할때 back의 값을 변경하고 POP으로 큐에서 추출할때 추출한 이후에 큐가 비어 있으면 큐의 크기를 -1로 변경했다.


    큐는 선입선출이니 딱 이 두 상태에서만 back의 값을 변경해주면 문제는 없다. 


    소스

    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
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.StringTokenizer;
     
    public class Main {
        public static Queue<Integer> queue;
        public static void main(String[] args) throws IOException{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st = null;
            int count = Integer.parseInt(br.readLine());
            
            queue = new LinkedList<Integer>();
            StringBuilder sb = new StringBuilder();
            int back = -1;
            
            while(count-- > 0) {
                st = new StringTokenizer(br.readLine());
                
                String order = st.nextToken();
                
                if("push".equals(order)) {
                    back = Integer.parseInt(st.nextToken());
                    queue.offer(back);
                }else if("size".equalsIgnoreCase(order)) {
                    sb.append(queue.size() + "\n");
                }else if("empty".equals(order)) {
                    if(queue.size() == 0) sb.append("1 \n");
                    else sb.append("0 \n");
                }else if("pop".equals(order)) {
                    if(queue.size() == 0) sb.append("-1 \n");
                    else sb.append(queue.poll() + "\n");
                    
                    if(queue.size() == 0) back = -1;
                }else if("front".equals(order)) {
                    if(queue.size() == 0) sb.append("-1 \n");
                    else sb.append(queue.peek() + "\n");
                }else if("back".equals(order)) {
                    sb.append(back + "\n");
                }
            }
            System.out.println(sb.toString());
        }
    }
    cs


    댓글

Designed by Tistory.